您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Springboot中數據訪問如何配置的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
@Bean @ConfigurationProperties(prefix="app.datasource") public DataSource dataSource() { return new FancyDataSource(); }
配置文件
app: datasource: url: "jdbc:h3:mem:mydb" username: "sa" password: "123123" pool-size: 30
FancyDataSource類具有相應的url,username,pool-size屬性。
Spring Boot還提供了一個名為DataSourceBuilder的實用工具生成器類,可用于創建一個標準數據源(如果它位于類路徑上)。構建器可以根據類路徑上的可用內容檢測要使用的類。它還根據JDBCURL自動檢測驅動程序。
@Bean @ConfigurationProperties("app.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); }
然而,有一個陷阱。因為連接池的實際類型沒有提供,所以在自定義數據源的元數據中沒有生成任何鍵,并且IDE中沒有可用的完成(因為數據源接口不公開任何屬性)。此外,如果類路徑上碰巧有Hikari,則此基本設置不起作用,因為Hikari沒有url屬性(但有jdbcUrl屬性)。在這種情況下,你必須按如下方式重寫配置:
app: datasource: jdbc-url: "jdbc:mysql://localhost/test" username: "dbuser" password: "dbpass" pool-size: 30
可以強制指定數據源類型
@Bean @ConfigurationProperties("app.datasource") public HikariDataSource dataSource() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); }
如果需要配置多個數據源,可以應用上一節中描述的相同技巧。但是,你必須將其中一個數據源實例標記為@Primary,因為將來的各種自動配置都希望能夠按類型獲得一個。
如果您創建自己的數據源,自動配置將退出。在以下示例中,我們提供了與主數據源上的自動配置完全相同的功能集:
@Bean @Primary @ConfigurationProperties("app.datasource.first") public DataSourceProperties firstDataSourceProperties() { return new DataSourceProperties(); } @Bean @Primary @ConfigurationProperties("app.datasource.first.configuration") public HikariDataSource firstDataSource() { return firstDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build(); } @Bean @ConfigurationProperties("app.datasource.second") public BasicDataSource secondDataSource() { return DataSourceBuilder.create().type(BasicDataSource.class).build(); }
這兩個數據源還綁定了高級定制。例如,您可以按如下方式配置它們:
app: datasource: first: url: "jdbc:mysql://localhost/first" username: "dbuser" password: "dbpass" configuration: maximum-pool-size: 30 second: url: "jdbc:mysql://localhost/second" username: "dbuser" password: "dbpass" max-total: 30
你也可以將相同的概念應用于輔助數據源,如以下示例所示:
@Bean @Primary @ConfigurationProperties("app.datasource.first") public DataSourceProperties firstDataSourceProperties() { return new DataSourceProperties(); } @Bean @Primary @ConfigurationProperties("app.datasource.first.configuration") public HikariDataSource firstDataSource() { return firstDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build(); } @Bean @ConfigurationProperties("app.datasource.second") public DataSourceProperties secondDataSourceProperties() { return new DataSourceProperties(); } @Bean @ConfigurationProperties("app.datasource.second.configuration") public BasicDataSource secondDataSource() { return secondDataSourceProperties().initializeDataSourceBuilder().type(BasicDataSource.class).build(); }
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注釋。
Spring Boot試圖根據它找到的@EnableAutoConfiguration猜測@Entity定義的位置。要獲得更多控制,可以使用@EntityScan注釋,如下例所示:
@Configuration(proxyBeanMethods = false) @EnableAutoConfiguration @EntityScan(basePackageClasses=City.class) public class Application { //... }
Spring Data JPA已經提供了一些獨立于供應商的配置選項(如SQL日志記錄選項),SpringBoot將這些選項和Hibernate的一些選項公開為外部配置屬性。其中一些是根據上下文自動檢測的,因此您不必設置它們。
spring.jpa.hibernate.ddl-auto是一種特殊情況,因為根據運行時條件,它有不同的默認值。如果使用嵌入式數據庫,并且沒有模式管理器(如Liquibase或Flyway)處理數據源,則默認情況下為create-drop。在所有其他情況下,它默認為none。
要使用的方言由JPA提供程序檢測。如果您喜歡自己設置方言,請設置
spring.jpa.database-platform屬性。
spring: jpa: hibernate: naming: physical-strategy: "com.example.MyPhysicalNamingStrategy" show-sql: true
Hibernate使用兩種不同的命名策略將名稱從對象模型映射到相應的數據庫名稱。可以通過設置
spring.jpa.hibernate.naming.physical-strategy屬性,屬性值為類的全限定名,package + clalss。
默認情況下,Spring Boot使用
SpringPhysicalNamingStrategy配置物理命名策略。此實現提供了與Hibernate4相同的表結構:所有點都替換為下劃線,駝峰大小寫也替換為下劃線。此外,默認情況下,所有表名都以小寫形式生成。例如,電話號碼實體映射到電話號碼表。如果您的模式需要混合大小寫標識符,請定義自定義SpringPhysicalNamingStrategybean,如以下示例所示:
@Bean SpringPhysicalNamingStrategy caseSensitivePhysicalNamingStrategy() { return new SpringPhysicalNamingStrategy() { @Override protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) { return false; } }; }
如果您更喜歡使用Hibernate 5的默認設置,請設置以下屬性:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
或者,您可以配置以下bean
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Hibernate二級緩存可以為一系列緩存提供程序進行配置。與其將Hibernate配置為再次查找緩存提供程序,不如盡可能提供上下文中可用的緩存提供程序。
要使用JCache實現這一點,首先要確保
org.hibernate.HibernateJCache在類路徑上可用。然后,添加HibernatePropertiesCustomizer bean,如以下示例所示:
@Configuration(proxyBeanMethods = false) public class HibernateSecondLevelCacheExample { @Bean public HibernatePropertiesCustomizer hibernateSecondLevelCacheCustomizer(JCacheCacheManager cacheManager) { return (properties) -> properties.put(ConfigSettings.CACHE_MANAGER, cacheManager.getCacheManager()); } }
如果需要對多個數據源使用JPA,那么每個數據源可能需要一個EntityManagerFactory。Spring ORM中的
LocalContainerEntityManagerFactoryBean允許您根據需要配置EntityManagerFactory。您還可以重用JPA屬性來綁定每個EntityManagerFactory的設置,如以下示例所示:
@Bean @ConfigurationProperties("app.jpa.first") public JpaProperties firstJpaProperties() { return new JpaProperties(); } @Bean public LocalContainerEntityManagerFactoryBean firstEntityManagerFactory(DataSource firstDataSource, JpaProperties firstJpaProperties) { EntityManagerFactoryBuilder builder = createEntityManagerFactoryBuilder(firstJpaProperties); return builder.dataSource(firstDataSource).packages(Order.class).persistenceUnit("firstDs").build(); } private EntityManagerFactoryBuilder createEntityManagerFactoryBuilder(JpaProperties jpaProperties) { JpaVendorAdapter jpaVendorAdapter = createJpaVendorAdapter(jpaProperties); return new EntityManagerFactoryBuilder(jpaVendorAdapter, jpaProperties.getProperties(), null); } private JpaVendorAdapter createJpaVendorAdapter(JpaProperties jpaProperties) { // Map JPA properties as needed return new HibernateJpaVendorAdapter(); }
上面的示例使用名為firstDataSource的數據源bean創建EntityManagerFactory。它掃描與訂單位于同一包中的實體。可以使用該應用程序映射其他JPA屬性。
Spring Data Rest可以將 Repository 實現公開為REST端點,前提是已經為應用程序啟用了 SpringMVC。
Spring Boot暴露了一組有用的屬性(來自Spring.data.rest命名空間),用于自定義
RepositoryRestConfiguration。如果需要提供額外的定制,那么應該使用RepositoryRestConfiguration。
使用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-rest-webmvc</artifactId> </dependency>
感謝各位的閱讀!關于“Springboot中數據訪問如何配置”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。