成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Springboot核心知識點之數據訪問配置

開發 前端
Spring Boot還提供了一個名為DataSourceBuilder的實用工具生成器類,可用于創建一個標準數據源(如果它位于類路徑上)。構建器可以根據類路徑上的可用內容檢測要使用的類。

[[442956]]

環境:Springboot2.4.13

自定義數據源配置

  1. @Bean 
  2. @ConfigurationProperties(prefix="app.datasource"
  3. public DataSource dataSource() { 
  4.   return new FancyDataSource(); 

 配置文件

  1. app: 
  2.   datasource: 
  3.     url: "jdbc:h2:mem:mydb" 
  4.     username: "sa" 
  5.     password"123123" 
  6.     pool-size: 30 

 FancyDataSource類具有相應的url,username,pool-size屬性。

Spring Boot還提供了一個名為DataSourceBuilder的實用工具生成器類,可用于創建一個標準數據源(如果它位于類路徑上)。構建器可以根據類路徑上的可用內容檢測要使用的類。它還根據JDBCURL自動檢測驅動程序。

  1. @Bean 
  2. @ConfigurationProperties("app.datasource"
  3. public DataSource dataSource() { 
  4.   return DataSourceBuilder.create().build(); 

 然而,有一個陷阱。因為連接池的實際類型沒有提供,所以在自定義數據源的元數據中沒有生成任何鍵,并且IDE中沒有可用的完成(因為數據源接口不公開任何屬性)。此外,如果類路徑上碰巧有Hikari,則此基本設置不起作用,因為Hikari沒有url屬性(但有jdbcUrl屬性)。在這種情況下,你必須按如下方式重寫配置:

  1. app: 
  2.   datasource: 
  3.     jdbc-url: "jdbc:mysql://localhost/test" 
  4.     username: "dbuser" 
  5.     password"dbpass" 
  6.     pool-size: 30 

 可以強制指定數據源類型

  1. @Bean 
  2. @ConfigurationProperties("app.datasource"
  3. public HikariDataSource dataSource() { 
  4.   return DataSourceBuilder.create().type(HikariDataSource.class).build(); 

多數據源配置

如果需要配置多個數據源,可以應用上一節中描述的相同技巧。但是,你必須將其中一個數據源實例標記為@Primary,因為將來的各種自動配置都希望能夠按類型獲得一個。

如果您創建自己的數據源,自動配置將退出。在以下示例中,我們提供了與主數據源上的自動配置完全相同的功能集:

  1. @Bean 
  2. @Primary 
  3. @ConfigurationProperties("app.datasource.first"
  4. public DataSourceProperties firstDataSourceProperties() { 
  5.   return new DataSourceProperties(); 
  6.  
  7. @Bean 
  8. @Primary 
  9. @ConfigurationProperties("app.datasource.first.configuration"
  10. public HikariDataSource firstDataSource() { 
  11.   return firstDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build(); 
  12.  
  13. @Bean 
  14. @ConfigurationProperties("app.datasource.second"
  15. public BasicDataSource secondDataSource() { 
  16.   return DataSourceBuilder.create().type(BasicDataSource.class).build(); 

 這兩個數據源還綁定了高級定制。例如,您可以按如下方式配置它們:

  1. app: 
  2.   datasource: 
  3.     first
  4.       url: "jdbc:mysql://localhost/first" 
  5.       username: "dbuser" 
  6.       password"dbpass" 
  7.       configuration: 
  8.         maximum-pool-size: 30 
  9.     second
  10.       url: "jdbc:mysql://localhost/second" 
  11.       username: "dbuser" 
  12.       password"dbpass" 
  13.       max-total: 30 

 你也可以將相同的概念應用于輔助數據源,如以下示例所示:

  1. @Bean 
  2. @Primary 
  3. @ConfigurationProperties("app.datasource.first"
  4. public DataSourceProperties firstDataSourceProperties() { 
  5.   return new DataSourceProperties(); 
  6.  
  7. @Bean 
  8. @Primary 
  9. @ConfigurationProperties("app.datasource.first.configuration"
  10. public HikariDataSource firstDataSource() { 
  11.   return firstDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build(); 
  12.  
  13. @Bean 
  14. @ConfigurationProperties("app.datasource.second"
  15. public DataSourceProperties secondDataSourceProperties() { 
  16.   return new DataSourceProperties(); 
  17.  
  18. @Bean 
  19. @ConfigurationProperties("app.datasource.second.configuration"
  20. public BasicDataSource secondDataSource() { 
  21.   return secondDataSourceProperties().initializeDataSourceBuilder().type(BasicDataSource.class).build(); 

使用Spring Data Repositories

Spring data 可以創建各種風格的@Repository接口的實現。只要這些@Repositories包含在@EnableAutoConfiguration類的同一個包(或子包)中,Spring Boot就可以為您處理所有這些。

對于許多應用程序,只需將正確的Spring Data依賴項放在類路徑上。

spring-boot-starter-data-jpa for JPA, spring-boot-starter-data-mongodb for Mongodb,等等。要開始,請創建一些存儲庫接口來處理@Entity對象。

Spring Boot根據找到的@EnableAutoConfiguration,嘗試猜測@Repository定義的位置。要獲得更多控制,請使用@EnableJpaRepositories注釋。

將@Entity定義與Spring配置分開

Spring Boot試圖根據它找到的@EnableAutoConfiguration猜測@Entity定義的位置。要獲得更多控制,可以使用@EntityScan注釋,如下例所示:

  1. @Configuration(proxyBeanMethods = false
  2. @EnableAutoConfiguration 
  3. @EntityScan(basePackageClasses=City.class) 
  4. public class Application { 
  5.   //... 

配置JPA屬性

Spring Data JPA已經提供了一些獨立于供應商的配置選項(如SQL日志記錄選項),SpringBoot將這些選項和Hibernate的一些選項公開為外部配置屬性。其中一些是根據上下文自動檢測的,因此您不必設置它們。

spring.jpa.hibernate.ddl-auto是一種特殊情況,因為根據運行時條件,它有不同的默認值。如果使用嵌入式數據庫,并且沒有模式管理器(如Liquibase或Flyway)處理數據源,則默認情況下為create-drop。在所有其他情況下,它默認為none。

要使用的方言由JPA提供程序檢測。如果您喜歡自己設置方言,請設置

spring.jpa.database-platform屬性。

  1. spring: 
  2.   jpa: 
  3.     hibernate: 
  4.       naming: 
  5.         physical-strategy: "com.example.MyPhysicalNamingStrategy" 
  6.     show-sql: true 

配置Hibernate命名策略

Hibernate使用兩種不同的命名策略將名稱從對象模型映射到相應的數據庫名稱。可以通過設置

spring.jpa.hibernate.naming.physical-strategy屬性,屬性值為類的全限定名,package + clalss。

默認情況下,Spring Boot使用

SpringPhysicalNamingStrategy配置物理命名策略。此實現提供了與Hibernate4相同的表結構:所有點都替換為下劃線,駝峰大小寫也替換為下劃線。此外,默認情況下,所有表名都以小寫形式生成。例如,電話號碼實體映射到電話號碼表。如果您的模式需要混合大小寫標識符,請定義自定義SpringPhysicalNamingStrategybean,如以下示例所示:

  1. @Bean 
  2. SpringPhysicalNamingStrategy caseSensitivePhysicalNamingStrategy() { 
  3.   return new SpringPhysicalNamingStrategy() { 
  4.     @Override 
  5.     protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) { 
  6.       return false
  7.     } 
  8.  }; 

 如果您更喜歡使用Hibernate 5的默認設置,請設置以下屬性:

  1. spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 

或者,您可以配置以下bean

  1. @Bean 
  2. public PhysicalNamingStrategy physicalNamingStrategy() { 
  3.   return new PhysicalNamingStrategyStandardImpl(); 

配置Hibernat二級緩存

Hibernate二級緩存可以為一系列緩存提供程序進行配置。與其將Hibernate配置為再次查找緩存提供程序,不如盡可能提供上下文中可用的緩存提供程序。

要使用JCache實現這一點,首先要確保

org.hibernate.HibernateJCache在類路徑上可用。然后,添加HibernatePropertiesCustomizer bean,如以下示例所示:

  1. @Configuration(proxyBeanMethods = false
  2. public class HibernateSecondLevelCacheExample { 
  3.   @Bean 
  4.   public HibernatePropertiesCustomizer hibernateSecondLevelCacheCustomizer(JCacheCacheManager cacheManager) { 
  5.     return (properties) -> properties.put(ConfigSettings.CACHE_MANAGER, cacheManager.getCacheManager()); 
  6.     } 

使用多個EntityManagerFactories

如果需要對多個數據源使用JPA,那么每個數據源可能需要一個EntityManagerFactory。Spring ORM中的

LocalContainerEntityManagerFactoryBean允許您根據需要配置EntityManagerFactory。您還可以重用JPA屬性來綁定每個EntityManagerFactory的設置,如以下示例所示:

  1. @Bean 
  2. @ConfigurationProperties("app.jpa.first"
  3. public JpaProperties firstJpaProperties() { 
  4.   return new JpaProperties(); 
  5.  
  6. @Bean 
  7. public LocalContainerEntityManagerFactoryBean firstEntityManagerFactory(DataSource firstDataSource, JpaProperties firstJpaProperties) { 
  8.   EntityManagerFactoryBuilder builder = createEntityManagerFactoryBuilder(firstJpaProperties); 
  9.   return builder.dataSource(firstDataSource).packages(Order.class).persistenceUnit("firstDs").build(); 
  10.  
  11. private EntityManagerFactoryBuilder createEntityManagerFactoryBuilder(JpaProperties jpaProperties) { 
  12.   JpaVendorAdapter jpaVendorAdapter = createJpaVendorAdapter(jpaProperties); 
  13.   return new EntityManagerFactoryBuilder(jpaVendorAdapter, jpaProperties.getProperties(), null); 
  14.  
  15. private JpaVendorAdapter createJpaVendorAdapter(JpaProperties jpaProperties) { 
  16.   // Map JPA properties as needed 
  17.   return new HibernateJpaVendorAdapter(); 

 上面的示例使用名為firstDataSource的數據源bean創建EntityManagerFactory。它掃描與訂單位于同一包中的實體。可以使用該應用程序映射其他JPA屬性。

將Spring數據存儲庫公開為REST端點

Spring Data Rest可以將 Repository 實現公開為REST端點,前提是已經為應用程序啟用了 SpringMVC。

Spring Boot暴露了一組有用的屬性(來自Spring.data.rest命名空間),用于自定義

RepositoryRestConfiguration。如果需要提供額外的定制,那么應該使用RepositoryRestConfiguration。

使用

  1. <dependency> 
  2.   <groupId>org.springframework.boot</groupId> 
  3.   <artifactId>spring-boot-starter-data-rest</artifactId> 
  4. </dependency> 
  5. <dependency> 
  6.   <groupId>org.springframework.data</groupId> 
  7.   <artifactId>spring-data-rest-webmvc</artifactId> 
  8. </dependency> 

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2020-11-06 00:50:16

JavaClassLoaderJVM

2021-01-15 08:35:49

Zookeeper

2025-01-07 14:10:46

SpringBoot開發Java

2021-01-06 13:52:19

zookeeper開源分布式

2020-10-26 10:40:31

Axios前端攔截器

2021-04-13 08:25:12

測試開發Java注解Spring

2024-11-04 09:00:00

Java開發

2025-03-26 11:30:40

2020-05-19 14:40:08

Linux互聯網核心

2024-04-23 14:25:16

Python備忘清單

2025-05-13 08:10:00

MySQL二進制日志binlog

2022-10-29 08:55:19

頁面react

2022-04-08 07:51:31

JavaJVM垃圾回收

2018-01-25 12:50:33

數據庫OracleROWNUM

2023-08-07 14:44:56

Socket文件描述符

2024-06-04 14:07:00

2021-01-18 10:33:53

Java反射模塊

2021-12-27 10:20:46

JavaNetty網絡

2017-03-07 13:03:34

AndroidView知識問答

2011-04-01 15:28:40

Zabbix配置安裝
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕 欧美 日韩 | 国产精品视频一区二区三区不卡 | 成人精品一区二区 | 怡红院免费的全部视频 | 免费看啪啪网站 | 九九九视频 | 久久不卡 | 日本成人福利视频 | 三级在线视频 | 欧美日韩在线观看一区 | 欧美舔穴| 日韩视频专区 | 成人特区 | 成人网在线观看 | 日韩中文一区二区三区 | 米奇狠狠鲁| 毛片a级毛片免费播放100 | 亚洲成人精品久久久 | 色成人免费网站 | 国产午夜精品一区二区 | 91视频a | 中午字幕在线观看 | 在线视频中文字幕 | 午夜伊人 | 99爱视频| 亚洲黄色av| 久久精品在线播放 | 一本一道久久a久久精品综合蜜臀 | www.一区二区三区 | 成人精品在线观看 | 国产98色在线 | 日韩 | v亚洲 | 毛片黄片免费看 | 91久久久久久久久久久 | 日本在线免费观看 | 久视频在线观看 | 人人干超碰 | 日本五月婷婷 | 久久小视频| 久久精品亚洲精品国产欧美 | 黄色毛片在线播放 |