主要是为了减少麻烦,图省事;可以让程序在运行的时候直接创建数据库;
下面是主要代码
package com.huxiaosu.boot.starter.datasource.annotation;
import com.huxiaosu.boot.starter.datasource.autocreate.AutoCreateDatabases;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
/**
* 自动创建数据库
* 多数据源配置可以自行扩展;直接改AutoCreateDatabases里面代码
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AutoCreateDatabases.class})
@Inherited
public @interface EnableCreateDataBases {
}
/*
* Project Name easy-boot
* File Name AutoCreateDatabases
* Package Name com.huxiaosu.boot.starter.datasource.autocreate.config
*/
package com.huxiaosu.boot.starter.datasource.autocreate;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.*;
@Slf4j
public class AutoCreateDatabases {
@Value(value = "${spring.datasource.username}")
private String dbUsername;
@Value(value = "${spring.datasource.password}")
private String dbPassword;
@Value(value = "${spring.datasource.url}")
private String dbUrl;
@Bean("dataSource")
@Primary
@Qualifier("dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource createDataBases(){
try{
String dbName = this.getDbName();
String tempDbUrl = dbUrl.replace(dbName, "mysql");
Connection conn = DriverManager.getConnection(tempDbUrl, dbUsername, dbPassword)
log.info("start create databases {}", dbName);
conn.prepareStatement("create database if not exists " + dbName + " CHARACTER SET utf8;").execute();
log.info(" create databases {} success", dbName);
}catch (Exception e){
log.error("create database error",e);
throw new RuntimeException(e);
}
return new DruidDataSource();
}
private String getDbName(){
String[] split = dbUrl.split("/");
List<String> list = Arrays.asList(split);
String s = list.get(3);
String[] split1 = s.split("\\?");
List<String> list1 = Arrays.asList(split1);
return list1.get(0);
}
}
启动类添加@EnableCreateDataBases 即可
@EnableCreateDataBases
public class AppServer {
public static void main(String[] args) {
SpringApplication.run(AppServer.class, args);
}
}