日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

springboot 啟動時初始化數(shù)據(jù)庫的步驟

瀏覽:26日期:2023-03-31 11:45:32
問題描述

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

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

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

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

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

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

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

如果通過配置文件不能滿足需求,可以通過代碼來初始化數(shù)據(jù)庫。只需要提供DataSourceInitializer這個bean,spring-boot啟動時就會根據(jù)DataSourceInitializer來初始化數(shù)據(jù)庫了。

@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ǔ)上,我們可以自定義注解,通過獲取注解上的sql文件路徑,來達(dá)到通過注解初始化數(shù)據(jù)庫目的,這樣更方便簡潔。首先定義注解InitDataSource:

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

然后通過ClassPathScanningCandidateComponentProvider這個類來掃描spring組件上InitDataSource注解的值,將值取出,添加到DataSourceInitializer的初始化腳本中:

@Bean public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator(); // 掃描com.mengyunzhi.measurement 包 找到InitDataSource注解的類(注解需使用到實現(xiàn)類上) ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); provider.addIncludeFilter(new AnnotationTypeFilter(InitDataSource.class)); //添加包含的過濾信息 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ù)庫初始化中 否則拋出異常終止執(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; }

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

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

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品欧美日韩精品| 在线天堂中文资源最新版| 国产精品视频一区二区三区四蜜臂| 另类av一区二区| 99国产精品久久久久久久| 日韩久久视频| 欧美久久天堂| 日韩三区在线| 欧美片第1页| 久久久久美女| 久久精品成人| 激情婷婷综合| 亚洲精品一区二区妖精| 免费观看久久av| 日韩午夜高潮| 美日韩精品视频| 综合一区av| 亚洲开心激情| 国产午夜一区| 久久精品一区二区国产| 福利精品在线| 日韩成人三级| 欧美另类专区| 久久最新视频| 日韩国产高清在线| 国产日产精品一区二区三区四区的观看方式| 天海翼亚洲一区二区三区| 日本aⅴ精品一区二区三区 | 亚洲高清成人| 99精品小视频| 免费视频国产一区| 免费日韩av| 日精品一区二区三区| 国产剧情在线观看一区| 精品一区二区三区在线观看视频 | 国产极品嫩模在线观看91精品| 国产激情久久| 黑森林国产精品av| 亚洲精品电影| 天堂va欧美ⅴa亚洲va一国产| 久久国产视频网| 嫩呦国产一区二区三区av| 日韩1区在线| 91精品电影| 午夜视频一区二区在线观看| 国产精品一区三区在线观看| 92国产精品| 三级在线观看一区二区 | 国产美女精品视频免费播放软件| 老司机精品视频网| 欧美亚洲激情| 日韩精品成人| 国产aa精品| 免费观看不卡av| 亚久久调教视频| av高清不卡| 综合国产精品| 国产精品99一区二区三区| 伊人精品视频| 国产精品综合| 伊人久久大香线蕉av不卡| 日本不卡视频在线| 在线看片国产福利你懂的| 亚洲欧美成人综合| 欧美激情aⅴ一区二区三区 | 免费观看在线色综合| 久久精品国产免费| 91成人精品| 国产精品一区二区三区www| 久久精品青草| 国产日韩中文在线中文字幕| 久久激情婷婷| 国产免费播放一区二区| 日韩午夜免费| 国产suv精品一区二区四区视频| 蜜桃视频一区二区三区| 久久91导航| 国产视频网站一区二区三区| 极品日韩av| 成人高清一区| 日韩国产欧美在线播放| 五月天综合网站| 国产在线一区不卡| 亚洲v天堂v手机在线| 国产99久久久国产精品成人免费| 国产九九精品| 亚洲午夜久久| 欧美日韩第一| 91日韩在线| 国产另类在线| 女同性一区二区三区人了人一 | 欧美精品影院| 日韩电影免费网址| 视频一区二区不卡| 久久久久免费| 日本伊人久久| 午夜精品婷婷| 国产精品超碰| 久久国产精品亚洲77777| 国产第一亚洲| 免费人成精品欧美精品| 国产成人精品免费视| 天堂精品久久久久| 亚洲成人国产| 加勒比视频一区| 日韩精品导航| 宅男噜噜噜66国产日韩在线观看| 国产乱人伦丫前精品视频| 最新国产拍偷乱拍精品| 卡一卡二国产精品| 亚洲精品系列| 日韩精品麻豆| 日韩久久视频| 久久不见久久见国语| 天堂va蜜桃一区二区三区| 日本午夜大片a在线观看| 国产麻豆精品| 亚洲精品婷婷| 国产在线|日韩| 成人在线视频区| 欧美日韩亚洲一区| 久久国产99| 国产在线观看www| 欧美日韩午夜电影网| 亚洲欧美日韩一区在线观看| 日韩久久视频| 国产精品三级| 国产精品99久久久久久董美香| 亚洲精品在线二区| 在线亚洲一区| 午夜久久tv| 动漫av一区| 国产欧美高清| 国产欧美日韩视频在线| 婷婷视频一区二区三区| 美女国产一区| 中国女人久久久| 亚洲精品欧美| 水蜜桃久久夜色精品一区的特点| 久久久久久久久丰满| 激情黄产视频在线免费观看| 国产精品一区二区三区av麻| 日本亚洲欧美天堂免费| 久久av在线| 亚洲精品视频一二三区| 日韩中文欧美在线| 女人天堂亚洲aⅴ在线观看| 久久精品国产99久久| 色老板在线视频一区二区| 激情国产在线| 欧美三区四区| 神马日本精品| 97在线精品| 超碰在线99| 韩国久久久久久| 涩涩av在线| 中文字幕系列一区| 日韩精品2区| 香蕉国产精品| 午夜在线精品| 亚洲三级网站| 日韩**一区毛片| 亚洲精品日本| 视频国产精品| 视频在线不卡免费观看| 国产不卡精品| 久久久久亚洲| 欧美二区视频| 丝瓜av网站精品一区二区| 五月国产精品| 另类综合日韩欧美亚洲| 国产精品精品| 久久一级电影| 国产精品免费看| 在线观看一区| 欧美自拍一区| 久久丁香四色| 欧美日韩高清| 中文字幕av亚洲精品一部二部| 日韩欧美高清一区二区三区| 国产美女撒尿一区二区| 国产精品va视频| 久久精品三级| 久久伦理在线| 蜜桃av一区二区三区电影| 欧美一级二区| 精品国产欧美| 四虎影视精品| 蜜桃久久久久久| 日韩成人精品一区二区三区| 国产精品xx| 99在线精品免费视频九九视| 午夜电影一区| 麻豆精品99| 久久久成人网| 宅男噜噜噜66国产日韩在线观看| 欧美aaaaaa午夜精品| 精品国产第一福利网站| 美女精品网站| 国产极品久久久久久久久波多结野|