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

SpringBoot啟動(dòng)執(zhí)行sql腳本的3種方法實(shí)例

 更新時(shí)間:2022年01月10日 11:13:19   作者:AtongWood  
在應(yīng)用程序啟動(dòng)后,可以自動(dòng)執(zhí)行建庫(kù)、建表等SQL腳本,下面這篇文章主要給大家介紹了關(guān)于SpringBoot啟動(dòng)執(zhí)行sql腳本的3種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

背景

項(xiàng)目里后端需要計(jì)算坐標(biāo)距離,想用sql實(shí)現(xiàn)算法,然后通過(guò)執(zhí)行一個(gè)sql腳本,創(chuàng)建一個(gè)函數(shù)供各業(yè)務(wù)調(diào)用。我們需要在springboot項(xiàng)目啟動(dòng)時(shí)執(zhí)行sql腳本,在網(wǎng)上一頓搜索,總結(jié)了有三種做法:

  • 配置application.yml文件
  • 自定義DataSourceInitializer Bean
  • 啟動(dòng)時(shí)執(zhí)行方法

第一種做法最方便簡(jiǎn)潔,是首選方案,但是由于種種原因項(xiàng)目里不能用,只能選擇使用第二種做法。第三種做法不推薦,這里只當(dāng)是記錄一下做過(guò)的工作。

開(kāi)發(fā)調(diào)測(cè)sql腳本的時(shí)候,推薦使用這個(gè)驅(qū)動(dòng),可以讓我們看到sql執(zhí)行日志,有沒(méi)有執(zhí)行?報(bào)了什么異常?

spring
  datasource
    driver-class-name: net.sf.log4jdbc.DriverSpy
<dependency>
    <groupId>com.googlecode.log4jdbc</groupId>
    <artifactId>log4jdbc</artifactId>
    <version>1.2</version>
    <scope>runtime</scope>
</dependency>

同時(shí),spring.datasource.url的配置應(yīng)該如下起頭

spring
  datasource
    url: 'jdbc:log4jdbc:mysql://XXXXX'

配置application.yml文件

spring:
  datasource:
    username: root
    password: root
    driver-class-name: net.sf.log4jdbc.DriverSpy
    url: jdbc:log4jdbc:mysql://localhost:3306/springboot
    schema:
      - classpath:sql/function.sql
      - classpath:sql/procedure.sql
    initialization-mode: ALWAYS
    separator:\\

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

以下兩種情況會(huì)導(dǎo)致啟動(dòng)時(shí)sql腳本不執(zhí)行:

1.啟動(dòng)類(lèi)上的注解如果配置了exclude={DataSourceAutoConfiguration.class},sql腳本將不被執(zhí)行。

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

2.如果開(kāi)啟了druid連接池的防火墻,sql腳本將不被執(zhí)行。

spring
  datasource
    druid
      filter
        wall
          enabled: true

自定義DataSourceInitializer Bean

參考博文:Spring Boot中自動(dòng)執(zhí)行sql腳本

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
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;

public class CustomizeDataSourceInitializer {

    @Value("classpath:sql/function.sql")
    private Resource functionScript;

    @Bean
    public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) {
        final DataSourceInitializer initializer = new DataSourceInitializer();
        // 設(shè)置數(shù)據(jù)源
        initializer.setDataSource(dataSource);
        initializer.setDatabasePopulator(databasePopulator());
        return initializer;
    }

    private DatabasePopulator databasePopulator() {
        final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
        populator.addScripts(functionScript);
        populator.setSeparator("$$");
        return populator;
    }
}

populator.setSeparator("$$")的作用和配置spring.datasource.separator一樣。

啟動(dòng)時(shí)執(zhí)行方法

參考博文:springboot啟動(dòng)前執(zhí)行方法的幾種方式

三種實(shí)現(xiàn)方式:

第一種 @PostConstruct注解

第二種 實(shí)現(xiàn)InitializingBean接口

第三種 實(shí)現(xiàn)BeanPostProcessor接口

這種做法思路就是啟動(dòng)時(shí)調(diào)用MyBatis接口,但是受限于Mybatis的用法規(guī)則,不能完美的滿(mǎn)足需求,比如,執(zhí)行的sql腳本只能有一條語(yǔ)句,這樣的話(huà),如果我要?jiǎng)?chuàng)建兩個(gè)存儲(chǔ)過(guò)程,需要先后調(diào)用兩個(gè)MyBatis接口。我們不必這么做,前兩種做法更好。

Springboot自動(dòng)執(zhí)行sql文件

在springboot1.5及以前的版本,要執(zhí)行sql文件只需在applicaion文件里指定sql文件的位置即可。但是到了springboot2.x版本,

如果只是這樣做的話(huà)springboot不會(huì)自動(dòng)執(zhí)行sql文件,還需在applicaion文件里加入如下配置

initialization-mode: always

這樣springboot就會(huì)幫我們自動(dòng)執(zhí)行sql了

注意:?。?!

建表完成后如果不再需要使用sql文件的話(huà)要把sql文件刪除,否則springboot會(huì)重新建表,這樣原來(lái)表中的內(nèi)容就沒(méi)有了?。?!

總結(jié)

到此這篇關(guān)于SpringBoot啟動(dòng)執(zhí)行sql腳本的3種方法的文章就介紹到這了,更多相關(guān)SpringBoot啟動(dòng)執(zhí)行sql腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

通江县| 哈尔滨市| 内丘县| 应用必备| 平舆县| 满洲里市| 绥棱县| 禄丰县| 玉山县| 大厂| 伊通| 黄石市| 铁岭县| 钦州市| 三穗县| 祁门县| 应城市| 丹寨县| 凌海市| 永修县| 宜章县| 和林格尔县| 隆昌县| 崇信县| 和硕县| 建水县| 甘南县| 焦作市| 焉耆| 湘阴县| 陆丰市| 开封市| 平度市| 云梦县| 阿鲁科尔沁旗| 兴海县| 隆子县| 西华县| 册亨县| 苍山县| 绥阳县|