欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Springboot核心知識點之數(shù)據(jù)訪問配置

 更新時間:2021年12月30日 09:52:54   作者:Spring源碼解讀  
這篇文章主要為大家介紹了Springboot核心知識點中的數(shù)據(jù)訪問配置,文中的示例代碼講解詳細,對我們了解SpringBoot有一定幫助,快跟隨小編一起學習一下吧

環(huán)境:Springboot2.4.13

自定義數(shù)據(jù)源配置

@Bean 
@ConfigurationProperties(prefix="app.datasource") 
public DataSource dataSource() { 
  return new FancyDataSource(); 
} 

配置文件

app: 
  datasource: 
    url: "jdbc:h2:mem:mydb" 
    username: "sa" 
    password: "123123" 
    pool-size: 30 

FancyDataSource類具有相應(yīng)的url,username,pool-size屬性。

Spring Boot還提供了一個名為DataSourceBuilder的實用工具生成器類,可用于創(chuàng)建一個標準數(shù)據(jù)源(如果它位于類路徑上)。構(gòu)建器可以根據(jù)類路徑上的可用內(nèi)容檢測要使用的類。它還根據(jù)JDBCURL自動檢測驅(qū)動程序。

@Bean 
@ConfigurationProperties("app.datasource") 
public DataSource dataSource() { 
  return DataSourceBuilder.create().build(); 
} 

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

app: 
  datasource: 
    jdbc-url: "jdbc:mysql://localhost/test" 
    username: "dbuser" 
    password: "dbpass" 
    pool-size: 30 

可以強制指定數(shù)據(jù)源類型

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

多數(shù)據(jù)源配置

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

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

@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(); 
} 

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

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 

你也可以將相同的概念應(yīng)用于輔助數(shù)據(jù)源,如以下示例所示:

@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 Repositories

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

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

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

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

將@Entity定義與Spring配置分開

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

@Configuration(proxyBeanMethods = false) 
@EnableAutoConfiguration 
@EntityScan(basePackageClasses=City.class) 
public class Application { 
  //... 
} 

配置JPA屬性

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

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

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

spring.jpa.database-platform屬性。

spring: 
  jpa: 
    hibernate: 
      naming: 
        physical-strategy: "com.example.MyPhysicalNamingStrategy" 
    show-sql: true 

配置Hibernate命名策略

Hibernate使用兩種不同的命名策略將名稱從對象模型映射到相應(yīng)的數(shù)據(jù)庫名稱。可以通過設(shè)置

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

默認情況下,Spring Boot使用

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

@Bean 
SpringPhysicalNamingStrategy caseSensitivePhysicalNamingStrategy() { 
  return new SpringPhysicalNamingStrategy() { 
    @Override 
    protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) { 
      return false; 
    } 
 }; 
} 

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

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 

配置Hibernat二級緩存

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

要使用JCache實現(xiàn)這一點,首先要確保

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()); 
    } 
} 

使用多個EntityManagerFactories

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

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

@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的數(shù)據(jù)源bean創(chuàng)建EntityManagerFactory。它掃描與訂單位于同一包中的實體??梢允褂迷搼?yīng)用程序映射其他JPA屬性。

將Spring數(shù)據(jù)存儲庫公開為REST端點

Spring Data Rest可以將 Repository 實現(xiàn)公開為REST端點,前提是已經(jīng)為應(yīng)用程序啟用了 SpringMVC。

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

RepositoryRestConfiguration。如果需要提供額外的定制,那么應(yīng)該使用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核心知識點之數(shù)據(jù)訪問配置的詳細內(nèi)容,更多關(guān)于Springboot數(shù)據(jù)訪問配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Spring特性實現(xiàn)接口多實現(xiàn)類的動態(tài)調(diào)用方式

    使用Spring特性實現(xiàn)接口多實現(xiàn)類的動態(tài)調(diào)用方式

    這篇文章主要介紹了使用Spring特性實現(xiàn)接口多實現(xiàn)類的動態(tài)調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 完整詳解Java開發(fā)學習路線指南

    完整詳解Java開發(fā)學習路線指南

    在本篇文章里小編給大家整理的是一篇關(guān)于Java開發(fā)學習路線以及期中的主要知識點內(nèi)容,有興趣的朋友么可以學習下。
    2022-11-11
  • Java Hibernate對象(瞬時態(tài),持久態(tài),脫管態(tài))詳解

    Java Hibernate對象(瞬時態(tài),持久態(tài),脫管態(tài))詳解

    這篇文章主要介紹了Java Hibernate對象(瞬時態(tài),持久態(tài),脫管態(tài))詳解的相關(guān)資料,這里對Java Hibernate對象進行了介紹及總結(jié),需要的朋友可以參考下
    2016-11-11
  • springboot實戰(zhàn)權(quán)限管理功能圖文步驟附含源碼

    springboot實戰(zhàn)權(quán)限管理功能圖文步驟附含源碼

    這篇文章主要為大家介紹了springboot實戰(zhàn)權(quán)限管理功能圖文步驟及示例源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Spring Bean實例的創(chuàng)建及構(gòu)造器的挑選

    Spring Bean實例的創(chuàng)建及構(gòu)造器的挑選

    這篇文章主要介紹了Spring Bean實例的創(chuàng)建及構(gòu)造器的挑選,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java效率工具之Lombok的具體使用

    Java效率工具之Lombok的具體使用

    這篇文章主要介紹了Java效率工具之Lombok的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Java生成二維碼可添加logo和文字功能

    Java生成二維碼可添加logo和文字功能

    這篇文章主要介紹了Java生成二維碼可添加logo和文字功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • SpringBoot程序的打包與運行的實現(xiàn)

    SpringBoot程序的打包與運行的實現(xiàn)

    本文主要介紹了SpringBoot程序的打包與運行的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • java求余的技巧匯總

    java求余的技巧匯總

    這篇文章主要給大家介紹了關(guān)于java求余技巧的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • SpringBoot使用MockMvc進行單元測試的實例代碼

    SpringBoot使用MockMvc進行單元測試的實例代碼

    在Spring Boot應(yīng)用程序中,使用MockMvc進行單元測試是一種有效的方式,可以驗證控制器的行為和API的正確性,在這篇博客中,我們將介紹如何使用MockMvc對用戶控制器進行測試,感興趣的朋友可以參考下
    2024-01-01

最新評論