javascript
Spring Boot和数据库初始化
Spring Boot是一個很好的框架,可在開發Spring應用程序時為開發人員節省大量時間和精力。
它的主要功能之一是數據庫初始化。 您可以使用spring boot來初始化您的sql數據庫。 我們將從gradle文件開始
group 'com.gkatzioura' version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.5buildscript {repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")} }apply plugin: 'idea' apply plugin: 'java' apply plugin: 'spring-boot'repositories {mavenCentral() } dependencies {compile("org.springframework.boot:spring-boot-starter-web") {exclude module: "spring-boot-starter-tomcat"}compile("org.springframework.boot:spring-boot-starter-jetty")compile("org.springframework:spring-jdbc")compile("org.springframework.boot:spring-boot-starter-actuator")compile("com.h2database:h2:1.4.191")testCompile group: 'junit', name: 'junit', version: '4.11' }要特別注意org.springframework:spring-jdbc依賴項。 實際上,這是有助于數據庫初始化的依賴項。 對于該示例,H2數據庫已綽綽有余。 應用程序主類
package com.gkatzioura.bootdatabaseinitialization;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext;/*** Created by gkatzioura on 29/4/2016.*/ @SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication springApplication = new SpringApplication();ApplicationContext applicationContext = springApplication.run(Application.class,args);}}下一步是指定數據源
package com.gkatzioura.bootdatabaseinitialization.config;import org.h2.jdbcx.JdbcDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary;import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource;/*** Created by gkatzioura on 29/4/2016.*/ @Configuration public class DataSourceConfig {private static final String TEMP_DIRECTORY = System.getProperty("java.io.tmpdir");@Bean(name = "mainDataSource")public DataSource createMainDataSource() {JdbcDataSource ds = new JdbcDataSource();ds.setURL("jdbc:h2:"+TEMP_DIRECTORY+"/testdata;MODE=MySQL");return ds;}}我們將schema.sql文件添加到資源文件夾中,以便將其加載到classpath中。 schema.sql文件將包含數據庫所需的所有表定義。
CREATE TABLE IF NOT EXISTS `Users` (`user_id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(200) NOT NULL,PRIMARY KEY (`user_id`) );下一個要添加的文件是resources文件夾上的data.sql。 該文件將包含填充數據庫所需的sql語句。
INSERT INTO `Users` (`user_id`,`name`) VALUES (null,'nick'); INSERT INTO `Users` (`user_id`,`name`) VALUES (null,'george');在初始化時,spring boot將搜索data.sql和schema.sql文件,并使用數據庫初始化程序執行它們。
到目前為止,還不錯,但是,當您定義了兩個數據源時,事情就變得復雜了。 我們將添加輔助數據源
package com.gkatzioura.bootdatabaseinitialization.config;import org.h2.jdbcx.JdbcDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary;import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource;/*** Created by gkatzioura on 29/4/2016.*/ @Configuration public class DataSourceConfig {private static final String TEMP_DIRECTORY = System.getProperty("java.io.tmpdir");@Bean(name = "mainDataSource")public DataSource createMainDataSource() {JdbcDataSource ds = new JdbcDataSource();ds.setURL("jdbc:h2:"+TEMP_DIRECTORY+"/testdata;MODE=MySQL");return ds;}@Bean(name = "secondaryDataSource")public DataSource createSecondaryDataSource() {JdbcDataSource ds = new JdbcDataSource();ds.setURL("jdbc:h2:"+TEMP_DIRECTORY+"/secondarydata;MODE=MySQL");return ds;} }通過啟動應用程序,我們得到一個錯誤
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: mainDataSource,secondaryDataSource問題在于數據源初始化程序注入了數據源。 因此,我們必須指定數據源注入,否則將獲得異常。 一種解決方法是指定哪個數據源bean是主要的。
@Bean(name = "mainDataSource")@Primarypublic DataSource createMainDataSource() {JdbcDataSource ds = new JdbcDataSource();ds.setURL("jdbc:h2:"+TEMP_DIRECTORY+"/testdata;MODE=MySQL");return ds;}這樣,初始化程序將使用mainDataSource bean運行schema.sql和data.sql腳本。 Spring Boot數據庫的另一個重要功能是初始化,它可以與flyway集成。 在此處獲取有關飛行路線的更多信息。
您可以在這里找到項目源代碼
翻譯自: https://www.javacodegeeks.com/2016/05/spring-boot-database-initialization.html
總結
以上是生活随笔為你收集整理的Spring Boot和数据库初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nosql的数据服务_使用NoSQL实现
- 下一篇: 手机怎么清理存储空间如何清理电脑运行内存