国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

springboot 啟動時初始化數據庫的步驟

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

在spring-boot啟動時,希望能執行相應的sql文件來初始化數據庫。

使用配置文件初始化數據庫

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

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

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

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

通過代碼初始化數據庫

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

@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;}

在此基礎上,我們可以自定義注解,通過獲取注解上的sql文件路徑,來達到通過注解初始化數據庫目的,這樣更方便簡潔。首先定義注解InitDataSource:

/** * 用于補充:Hibernate無法自動創建視圖的缺陷。 * 系統啟動時(hibernate根據entity創建完基本的數據表后),開始執行本注解下的sql文件中的SQL語言。 * 使用方法: * @InitDataSource('sql文件路徑(相對于resources路徑下)') ---- 注解到對應的類上 * 比如:@InitDataSource('db/view/createView.sql)') * 使用示例請參見:ResourceApplication.java * 預了解詳細的實現過程請參考: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注解的類(注解需使用到實現類上) 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文件存在 加入數據庫初始化中 否則拋出異常終止執行 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'})注解,就可以自動進行數據庫的初始化操作了。

以上就是springboot 啟動時初始化數據庫的步驟的詳細內容,更多關于springboot 初始化數據庫的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 日韩精品久久久免费观看夜色 | 久久久久免费精品国产 | 亚洲第一页在线 | 欧美视频一区 | 免费看的一级片 | 亚洲自拍偷拍网 | 欧美日韩美女 | 91成人在线视频 | 亚洲精品国产字幕久久不卡 | 国产三级a三级三级三级 | 日韩一级生活片 | 亚洲精品一区二区三区www | 日本欧美不卡一区二区三区在线 | 日产国产精品久久久久久 | 国产精品成人免费观看 | 日本一级特黄毛片高清视频 | 免费亚洲网站 | 亚洲成人在线视频网站 | 免费在线观看黄色毛片 | 免费久久精品视频 | 污到下面流水的视频 | 日韩精品麻豆 | 亚洲免费中文 | 在线视频第一页 | 99国产欧美久久精品 | 欧美亚洲综合另类在线观看 | 精品三级内地国产在线观看 | 日本免费在线 | 国产成人美女福利在线观看 | 亚洲大片免费 | 美国免费毛片 | 99精品视频免费 | 欧美成人亚洲高清在线观看 | 99热久久国产这里是精品 | 一区二区三区四区五区六区 | 久久96国产精品久久久 | 啪啪一级视频 | 国产成人在线免费观看 | 成人在线视频免费 | 日产一区两区三区四区 | 国产亚洲欧美在线视频 |