<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ( 三十一 )、 SpringBoot項(xiàng)目啟動(dòng)自動(dòng)執(zhí)行sql腳本

      ( 三十一 )、 SpringBoot項(xiàng)目啟動(dòng)自動(dòng)執(zhí)行sql腳本

       

       

       

      方式一:在配置文件中配置相關(guān)屬性

      1、關(guān)鍵屬性:

      1、spring.datasource.schema:

      • 表初始化語句,默認(rèn)加載schema.sql,看getScripts源碼,它還會(huì)加載schema-${platform}.sql文件,其中platform就是spring.datasource.platform的值指定DDL腳本文件

      2、spring.datasource.data:

      • 數(shù)據(jù)初始化,默認(rèn)加載data.sql,還會(huì)加載data-${platform}.sql文件,指定 DQL(數(shù)據(jù)查詢)腳本或DML(數(shù)據(jù)操作)腳本 文件, 一般都是數(shù)據(jù)插入腳本文件

      3、spring.datasource.platform:
      為了支持不同數(shù)據(jù)庫platform屬性的默認(rèn)值是’all’,所以當(dāng)有在不同數(shù)據(jù)庫切換的情況下才使用all配置,因?yàn)槟J(rèn)值的情況下,spring boot會(huì)自動(dòng)檢測當(dāng)前使用的數(shù)據(jù)庫。

      4、spring.datasource.initialization-mode:

      • 初始化模式(springboot2.0),其中有三個(gè)值:
      1. always為始終執(zhí)行初始化
      2. embedded只初始化內(nèi)存數(shù)據(jù)庫(默認(rèn)值),如h2等
      3. never為不執(zhí)行初始化
      4. 在SpringBoot1.x中,不需要配置便可之間運(yùn)行
      5. 在SpringBoot 2.x 版本中,默認(rèn)值是embedded,所以必須配置為 always

      5、spring.datasource.separator

      • 默認(rèn)為 ;,自定義存儲(chǔ)過程或者函數(shù)時(shí),可能需要使用delimiter設(shè)置斷句分隔符,但是delimiter在springboot執(zhí)行的sql腳本里不可用。springboot提供了spring.datasource.separator配置解決這個(gè)問題,如上配置之后,不必執(zhí)行delimiter $$$,我們?cè)谀_本里可以直接使用$$$作為分隔符。

      其他屬性:
      spring.datasouce.data-password
      spring.datasouce.data-username
      spring.datasouce.schema-password
      spring.datasouce.schema-username
      這四個(gè)值為執(zhí)行schema.sql或者data.sql時(shí),用的用戶

      2、yml配置示例:

      spring:
        datasource:
          schema: 
            - classpath:sql/schema.sql
            - classpath:sql/procedure.sql
            - classpath:sql/function.sql
          data: classpath:sql/data.sql
          initialization-mode: always
          platform: mysql
          separator: $$$ # 默認(rèn)為 ;

       

      方式二: 自定義DataSourceInitializer

       在SpringBoot的架構(gòu)中,DataSourceInitializer類可以在項(xiàng)目啟動(dòng)后初始化數(shù)據(jù),我們可以通過自動(dòng)執(zhí)行自定義sql腳本初始化數(shù)據(jù)。通過自定義DataSourceInitializer Bean就可以實(shí)現(xiàn)按照業(yè)務(wù)要求執(zhí)行特定的腳本。

      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.core.io.Resource;
      import org.springframework.jdbc.datasource.init.DataSourceInitializer;
      import org.springframework.jdbc.datasource.init.DatabasePopulator;
      import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
      
      import javax.sql.DataSource;
      
      /**
       * @ClassName CustomizeDataSourceInitializer
       * @Description: TODO
       * @Author guoshihua
       * @Date 2020/5/5 0005 下午 3:47
       * @Version V1.0
       * @See 版權(quán)聲明
       **/
      @Configuration
      public class CustomizeDataSourceInitializer {
      
          @Value("classpath:sql/schema.sql")
          private Resource sqlScriptSchema;
          @Value("classpath:sql/data.sql")
          private Resource sqlScriptData;
          @Value("classpath:sql/procedure.sql")
          private Resource sqlScriptProcedure;
          @Value("classpath:sql/function.sql")
          private Resource sqlScriptFunction;
          
          @Bean
          public DataSourceInitializer dataSourceInitializer(final DataSource dataSource){
              DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
              dataSourceInitializer.setDataSource(dataSource);
              dataSourceInitializer.setDatabasePopulator(databasePopulator());
              return dataSourceInitializer;
          }
      
          private DatabasePopulator databasePopulator(){
              ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
              populator.addScript(sqlScriptSchema);
              populator.addScript(sqlScriptData); 
              populator.addScript(sqlScriptProcedure);
              populator.addScript(sqlScriptFunction); 
              populator.setSeparator("$$$"); // 分隔符,默認(rèn)為;
              return populator;
          }
      }

       

       

      3、不同運(yùn)行環(huán)境執(zhí)行不同腳本

      一般情況下,都會(huì)有多個(gè)運(yùn)行環(huán)境,比如開發(fā)、測試、生產(chǎn)等。而不同運(yùn)行環(huán)境通常需要執(zhí)行的sql會(huì)有所不同。為解決這個(gè)問題,可以使用通配符來實(shí)現(xiàn)。

      創(chuàng)建不同環(huán)境的文件夾
      在 resources 文件夾創(chuàng)建不同環(huán)境對(duì)應(yīng)的文件夾,如dev/、test/、prod/。

      配置 : application.yml

      spring:
        datasource:
          schema: classpath:${spring.profiles.active:dev}/schema.sql 
          data: classpath:${spring.profiles.active:dev}/data.sql
          initialization-mode: always
          platform: mysql
          separator: $$$ # 默認(rèn)為 ;

       注:\${}通配符支持缺省值。如上面的配置中的`${spring.profiles.active:dev}`,其中分號(hào)前是取屬性spring.profiles.active的值,而當(dāng)該屬性的值不存在,則使用分號(hào)后面的值,即dev。

       

      posted @ 2021-10-24 10:31  鄧維-java  閱讀(2429)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩精品人妻中文字幕| 极品尤物被啪到呻吟喷水| 呼伦贝尔市| 精品久久精品久久精品九九| 亚洲成在人线AⅤ中文字幕| 人成午夜大片免费视频77777| av新版天堂在线观看| 亚洲色偷偷色噜噜狠狠99| 日韩av片无码一区二区不卡| 中文人妻| 性xxxx视频播放免费| 狠狠综合久久综合88亚洲爱文| 无码人妻一区二区三区AV| 国内外成人综合免费视频| 成人av专区精品无码国产| 97视频精品全国免费观看| 最近免费中文字幕大全| 激情六月丁香婷婷四房播| 欧美色欧美亚洲高清在线观看| 1024你懂的国产精品| 又大又粗又硬又爽黄毛少妇| 久久夜色精品国产亚av| 亚洲av成人无码精品电影在线| 国产一级av在线播放| 囯产精品一区二区三区线| 国产精品自拍三级在线观看| 亚洲色欲色欲www在线看| 狠狠精品久久久无码中文字幕| 国产老妇伦国产熟女老妇高清| 无码av中文一区二区三区桃花岛| 美女自卫慰黄网站| 亚洲中文字幕精品第三区| 亚洲av日韩在线资源| 亚洲精品国产综合久久一线| 开心激情站开心激情网六月婷婷| 国产成人99亚洲综合精品| 中文字幕V亚洲日本在线电影| 亚洲欧美中文日韩V在线观看| 婷婷99视频精品全部在线观看 | 国产欧美性成人精品午夜| 亚洲精品国模一区二区|