最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于SpringBoot實現(xiàn)動態(tài)配置數(shù)據(jù)庫的加載

 更新時間:2024年10月11日 08:30:31   作者:離開地球表面_99  
這篇文章主要介紹了Spring?Boot?如何動態(tài)配置數(shù)據(jù)庫的加載,現(xiàn)項目有一個需求,期望通過在application.yml配置文件中設(shè)置一個開關(guān),來決定是否加載數(shù)據(jù)庫,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下

1. 背景

現(xiàn)項目有一個需求,期望通過在application.yml配置文件中設(shè)置一個開關(guān),來決定是否加載數(shù)據(jù)庫。要求:

  • 當開關(guān)的值為true時加載數(shù)據(jù)庫;

  • 當開關(guān)的值為false或沒有該配置時則不加載數(shù)據(jù)庫。

2. 具體實現(xiàn)

2.1 數(shù)據(jù)庫相關(guān)配置

application.yml中添加配置spring.datasource.enabled來決定是否加載數(shù)據(jù)庫相關(guān)配置。

spring:
  datasource:
    #開啟MySQL
    enabled: true
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT%2b8&characterEncoding=utf8&connectTimeout=30000&socketTimeout=30000&autoReconnect=true&cachePrepStmts=true&useServerPrepStmts=true
    username: root
    password: 123456
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      # 連接池名稱
      pool-name: MyHikariCP
      #最小空閑連接,默認值10,小于0或大于maximum-pool-size,都會重置為maximum-pool-size
      minimum-idle: 10
      #連接池最大連接數(shù),默認是10 (cpu核數(shù)量 * 2 + 硬盤數(shù)量)
      maximum-pool-size: 30
      #空閑連接超時時間,默認值600000(10分鐘),大于等于max-lifetime且max-lifetime>0,會被重置為0;不等于0且小于10秒,會被重置為10秒。
      idle-timeout: 600000
      #連接最大存活時間,不等于0且小于30秒,會被重置為默認值30分鐘.設(shè)置應(yīng)該比mysql設(shè)置的超時時間短
      max-lifetime: 1800000
      #連接超時時間:毫秒,小于250毫秒,否則被重置為默認值30秒
      connection-timeout: 30000
      #用于測試連接是否可用的查詢語句
      connection-test-query: SELECT 1

  jpa:
    database: mysql
    show-sql: false
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      ddl-auto: update
    properties:
      hibernate:
        jdbc:
          batch_size: 100
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        enable_lazy_load_no_trans: true
    open-in-view: false

2.2 啟動類添加注解

啟動類添加注解@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }), 代表默認情況下不自動加載數(shù)據(jù)庫相關(guān)配置。

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class OcrsrvcApplication {
    public static void main(String[] args) {
        SpringApplication.run(OcrsrvcApplication.class, args);
    }
}

2.3 新增DataSourceConfig配置類

新增數(shù)據(jù)源配置類,用于自定義數(shù)據(jù)源的創(chuàng)建。

使用注解@ConditionalOnProperty,這樣可以根據(jù)特定屬性的值來決定是否加載某個組件。

@Configuration
@ConditionalOnProperty(name = "spring.datasource.enabled", havingValue = "true")
@Slf4j
public class DataSourceConfig {

    @Value("${spring.datasource.url}")
    private String jdbcUrl;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.hikari.pool-name}")
    private String poolName;

    @Value("${spring.datasource.hikari.minimum-idle}")
    private int minimumIdle;

    @Value("${spring.datasource.hikari.maximum-pool-size}")
    private int maximumPoolSize;

    @Value("${spring.datasource.hikari.idle-timeout}")
    private long idleTimeout;

    @Value("${spring.datasource.hikari.max-lifetime}")
    private long maxLifetime;

    @Value("${spring.datasource.hikari.connection-timeout}")
    private long connectionTimeout;

    @Value("${spring.datasource.hikari.connection-test-query}")
    private String connectionTestQuery;

    @Bean
    public DataSource dataSource() {

        log.info("====加載數(shù)據(jù)庫===");
        HikariConfig hikariConfig = new HikariConfig();

        hikariConfig.setJdbcUrl(jdbcUrl);
        hikariConfig.setDriverClassName(driverClassName);
        hikariConfig.setUsername(username);
        hikariConfig.setPassword(password);
        hikariConfig.setPoolName(poolName);
        hikariConfig.setMinimumIdle(minimumIdle);
        hikariConfig.setMaximumPoolSize(maximumPoolSize);
        hikariConfig.setIdleTimeout(idleTimeout);
        hikariConfig.setMaxLifetime(maxLifetime);
        hikariConfig.setConnectionTimeout(connectionTimeout);
        hikariConfig.setConnectionTestQuery(connectionTestQuery);

        return new HikariDataSource(hikariConfig);
    }
}

2.4 相關(guān)業(yè)務(wù)邏輯調(diào)整

涉及到使用數(shù)據(jù)庫的相關(guān)業(yè)務(wù)邏輯,可在XxxRepository類上添加注解@ConditionalOnProperty(name = "spring.datasource.enabled", havingValue = "true") ,這代表只有在啟用數(shù)據(jù)庫時,才會加載相應(yīng)組件。

使用注解@Autowired(required = false)注入XxxRepository,代表允許為空,避免Bean不存在時出錯

@Autowired(required = false)  
private XxxRepository xxxRepository;

到此這篇關(guān)于基于SpringBoot實現(xiàn)動態(tài)配置數(shù)據(jù)庫的加載的文章就介紹到這了,更多相關(guān)SpringBoot配置數(shù)據(jù)庫的加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Properties類操作.properties配置文件方法總結(jié)

    基于Properties類操作.properties配置文件方法總結(jié)

    這篇文章主要介紹了Properties類操作.properties配置文件方法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • @Conditional注解的使用場景和源碼解析

    @Conditional注解的使用場景和源碼解析

    這篇文章主要介紹了@Conditional注解的使用場景和源碼解析,@Conditional是一個條件注解,它的作用是判斷Bean是否滿足條件,如果滿足條件,則將Bean注冊進IOC中,如果不滿足條件,則不進行注冊,需要的朋友可以參考下
    2023-11-11
  • Java必備知識之位運算及常見進制解讀

    Java必備知識之位運算及常見進制解讀

    從現(xiàn)代計算機中所有的數(shù)據(jù)二進制的形式存儲在設(shè)備中。即 0、1 兩種狀態(tài),計算機對二進制數(shù)據(jù)進行的運算(+、-、*、/)都是叫位運算,即將符號位共同參與運算的運算
    2021-10-10
  • mybatis-plus自動裝配時間失效的解決

    mybatis-plus自動裝配時間失效的解決

    本文主要介紹了mybatis-plus自動裝配時間失效,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • SpringBoot多環(huán)境開發(fā)與日志小結(jié)

    SpringBoot多環(huán)境開發(fā)與日志小結(jié)

    這篇文章主要介紹了SpringBoot多環(huán)境開發(fā)與日志,下面給大家說一下如何基于多環(huán)境開發(fā)做配置獨立管理,務(wù)必掌握,需要的朋友可以參考下
    2022-08-08
  • Java線程池執(zhí)行過程中遇到異常的原因和解決辦法

    Java線程池執(zhí)行過程中遇到異常的原因和解決辦法

    當線程池中線程頻繁出現(xiàn)未捕獲的異常,那線程的復(fù)用率就大大降低了,需要不斷地創(chuàng)建新線程,所以本文通過詳細的代碼給大家介紹了Java線程池執(zhí)行過程中遇到異常的解決辦法,需要的朋友可以參考下
    2025-10-10
  • 基于Maven?pom文件中屬性變量總結(jié)

    基于Maven?pom文件中屬性變量總結(jié)

    這篇文章主要介紹了Maven?pom文件中屬性變量總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Springboot之日志、配置文件、接口數(shù)據(jù)如何脫敏

    Springboot之日志、配置文件、接口數(shù)據(jù)如何脫敏

    本文主要介紹了Springboot之配置文件數(shù)據(jù)脫敏、接口返回數(shù)據(jù)脫敏、日志文件數(shù)據(jù)脫敏三個方面,需要了解學習的小伙伴快跟隨小編的腳步一起去看看吧
    2021-09-09
  • MybatisPlus如何調(diào)用count函數(shù)

    MybatisPlus如何調(diào)用count函數(shù)

    這篇文章主要介紹了MybatisPlus如何調(diào)用count函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 原來Java中有兩個ArrayList

    原來Java中有兩個ArrayList

    原來Java中有兩個ArrayList,本文就帶著大家一起探究Java中的ArrayList,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評論

嵩明县| 麟游县| 井研县| 衡南县| 鄂尔多斯市| 馆陶县| 仁怀市| 叙永县| 那曲县| 浑源县| 体育| 邢台县| 杭锦后旗| 巴中市| 临桂县| 焦作市| 沈丘县| 三门峡市| 太康县| 大城县| 开鲁县| 石林| 府谷县| 北流市| 溧水县| 浮山县| 区。| 云安县| 永寿县| 呼伦贝尔市| 庄河市| 江门市| 宣化县| 舞钢市| 澳门| 彭阳县| 泰州市| 习水县| 西宁市| 上虞市| 高唐县|