最新国产好看的视频,伊人天堂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ù)據(jù)庫,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下

1. 背景

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

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

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

2. 具體實現(xiàn)

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

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

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分鐘.設置應該比mysql設置的超時時間短
      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ù)庫相關配置。

@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 相關業(yè)務邏輯調(diào)整

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

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

@Autowired(required = false)  
private XxxRepository xxxRepository;

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    基于Maven?pom文件中屬性變量總結

    這篇文章主要介紹了Maven?pom文件中屬性變量總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    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

最新評論

麻栗坡县| 七台河市| 堆龙德庆县| 新营市| 昭苏县| 滨海县| 梅州市| 高阳县| 绥宁县| 萨迦县| 宽甸| 富阳市| 怀仁县| 马鞍山市| 徐汇区| 阿克| 汪清县| 都兰县| 固安县| 洛隆县| 乐安县| 金门县| 白沙| 承德市| 丰台区| 吴忠市| 池州市| 鹤庆县| 德安县| 措勤县| 南宁市| 寿宁县| 宝鸡市| 丽水市| 金川县| 永和县| 浠水县| 永泰县| 阳春市| 漳浦县| 正阳县|