久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

springboot 啟動(dòng)時(shí)初始化數(shù)據(jù)庫(kù)的步驟

瀏覽:3日期:2023-03-31 11:45:32
問(wèn)題描述

在spring-boot啟動(dòng)時(shí),希望能執(zhí)行相應(yīng)的sql文件來(lái)初始化數(shù)據(jù)庫(kù)。

使用配置文件初始化數(shù)據(jù)庫(kù)

可以在spring-boot的配置文件application.yml中設(shè)置要初始化的sql文件。這是最簡(jiǎn)單的方法,只需要添加屬性就可以實(shí)現(xiàn)。

首先設(shè)置spring.datasource.initialization-mode=always表示任何類型數(shù)據(jù)庫(kù)都進(jìn)行數(shù)據(jù)庫(kù)初始化,默認(rèn)情況下,spring-boot會(huì)自動(dòng)加載data.sql或data-${platform}.sql文件來(lái)初始化數(shù)據(jù)庫(kù)。可以通過(guò)設(shè)置不同的數(shù)據(jù)庫(kù)平臺(tái)來(lái)改變啟動(dòng)的腳本名稱。

例如設(shè)置spring.datasource.platform=mysql,就會(huì)加載data-mysql.sql的數(shù)據(jù)庫(kù)腳本。把數(shù)據(jù)庫(kù)腳本文件放在resources路徑下即可。

如果項(xiàng)目使用的是flyway管理數(shù)據(jù)庫(kù)的話,可以直接在flyway路徑下添加一個(gè)新版本的sql文件,flyway也會(huì)自動(dòng)執(zhí)行sql文件并記錄版本信息。

通過(guò)代碼初始化數(shù)據(jù)庫(kù)

如果通過(guò)配置文件不能滿足需求,可以通過(guò)代碼來(lái)初始化數(shù)據(jù)庫(kù)。只需要提供DataSourceInitializer這個(gè)bean,spring-boot啟動(dòng)時(shí)就會(huì)根據(jù)DataSourceInitializer來(lái)初始化數(shù)據(jù)庫(kù)了。

@Beanpublic DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator(); resourceDatabasePopulator.addScript(new ClassPathResource('/data.sql')); DataSourceInitializer dataSourceInitializer = new DataSourceInitializer(); dataSourceInitializer.setDataSource(dataSource); dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator); return dataSourceInitializer;}

在此基礎(chǔ)上,我們可以自定義注解,通過(guò)獲取注解上的sql文件路徑,來(lái)達(dá)到通過(guò)注解初始化數(shù)據(jù)庫(kù)目的,這樣更方便簡(jiǎn)潔。首先定義注解InitDataSource:

/** * 用于補(bǔ)充:Hibernate無(wú)法自動(dòng)創(chuàng)建視圖的缺陷。 * 系統(tǒng)啟動(dòng)時(shí)(hibernate根據(jù)entity創(chuàng)建完基本的數(shù)據(jù)表后),開(kāi)始執(zhí)行本注解下的sql文件中的SQL語(yǔ)言。 * 使用方法: * @InitDataSource('sql文件路徑(相對(duì)于resources路徑下)') ---- 注解到對(duì)應(yīng)的類上 * 比如:@InitDataSource('db/view/createView.sql)') * 使用示例請(qǐng)參見(jiàn):ResourceApplication.java * 預(yù)了解詳細(xì)的實(shí)現(xiàn)過(guò)程請(qǐng)參考:WebConfig.java 的 dataSourceInitializer方法 * @author huangtingxiang */@Target({ElementType.TYPE}) // 該注解用于類上 @Retention(RetentionPolicy.RUNTIME) // 在運(yùn)行時(shí)起作用 @Component public @interface InitDataSource { String[] value(); }

然后通過(guò)ClassPathScanningCandidateComponentProvider這個(gè)類來(lái)掃描spring組件上InitDataSource注解的值,將值取出,添加到DataSourceInitializer的初始化腳本中:

@Bean public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator(); // 掃描com.mengyunzhi.measurement 包 找到InitDataSource注解的類(注解需使用到實(shí)現(xiàn)類上) ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.addIncludeFilter(new AnnotationTypeFilter(InitDataSource.class)); //添加包含的過(guò)濾信息 for (BeanDefinition beanDef : provider.findCandidateComponents('com.mengyunzhi.measurement')) { Class<?> cl = null; try { cl = Class.forName(beanDef.getBeanClassName()); InitDataSource initDataSource = cl.getAnnotation(InitDataSource.class); String[] sqlFiles = initDataSource.value(); for (String sql: sqlFiles) { // 如果sql文件存在 加入數(shù)據(jù)庫(kù)初始化中 否則拋出異常終止執(zhí)行 ClassPathResource resource = new ClassPathResource('/' + sql); if (resource.exists()) { resourceDatabasePopulator.addScript(resource); } else { throw new DataSourceInitializerException('未找到資源文件:' + sql, cl); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } DataSourceInitializer dataSourceInitializer = new DataSourceInitializer(); dataSourceInitializer.setDataSource(dataSource); dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator); return dataSourceInitializer; }

這樣一來(lái),只需要在spring-boot類上使用@InitDataSource({'data.sql'})注解,就可以自動(dòng)進(jìn)行數(shù)據(jù)庫(kù)的初始化操作了。

以上就是springboot 啟動(dòng)時(shí)初始化數(shù)據(jù)庫(kù)的步驟的詳細(xì)內(nèi)容,更多關(guān)于springboot 初始化數(shù)據(jù)庫(kù)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 免费一区二区 | 特级生活片 | a成人在线 | 国产精品久久久久久久久久ktv | 国产在线激情视频 | 午夜亚洲福利 | 日韩精品在线免费观看视频 | 中文字幕成人影院 | 日韩免费 | 特黄级国产片 | 国产ts余喵喵和直男多体位 | 在线观看第一页 | 亚洲一区视频 | 日本免费xxxx | 午夜精品久久久久久 | 中文字幕国产视频 | 免费观看一级黄色片 | 精品在线一区二区 | 欧洲精品视频一区 | 欧美性受| 欧美精品一区二区三区在线 | 久久精品久久久 | 欧美激情一区二区三区四区 | 亚洲欧美在线播放 | 蜜桃av一区二区三区 | 97色综合 | 亚洲网站免费 | 久久久久国产精品一区二区三区 | 国产亚洲精品久久久优势 | 久久精品一 | 久久亚洲精品中文字幕 | 九九天堂 | 毛片久久久 | 欧洲一级毛片 | 国产精品久久久久久久7电影 | 日本一区二区三区四区不卡视频 | 五月激情综合网 | 国产小视频在线观看 | 在线观看欧美日韩 | 成全视频免费观看在线看黑人 | 婷婷久久五月 |