spring boot 手动新增数据库表和数据库表字段

今天遇到一个问题,公司项目使用的spring boot 2.0,数据库是使用h2,这个项目是单机项目,每天电脑上面部署一个项目,每台电脑都有一个单独的数据库。

每次当新版本如果有新增表或者表字段时,都需要客户方把数据库删除,重新启动项目,项目会自动把数据库表创建出来,这么做,在测试阶段当然可以,但是在正式使用时,就不行了。

这个时候,就需要客户拿到新版本的项目时,启动项目,就可以把缺少的表和一些表的字段,自动新增到数据里面,这样客户的数据库数据就不会丢失了。

项目启动,新增数据库表:

配置文件:

spring.datasource.schema=classpath:create_table.sql  #初始化执行sql语句
create_table.sql
-- 2019年06月03日,新增的表:LAMP_CONFIG
-- 判断表是否存在,如果不存在就创建
CREATE TABLE IF NOT EXISTS `LAMP_CONFIG` (
  ID INT PRIMARY KEY,
  create_date 	timestamp(26,6),
  angle	integer(10)
);

项目启动,修改表的字段:

使用这个功能,需要引入spring boot关于jdbc的包:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
/**
 * 用于项目启动后,新增数据库中表的字段。create_table.sql 文件是用来新建数据表。
 * 创建顺序:create_table.sql执行  》  当前类的执行
 * 这个功能是因为客户需要系统无缝升级,就是当发布了一个新的版本后,如果新版本有新增了表,或者需要给表新增字段、删除字段等,就需要用到这个地方了。
 */
@Component
public class CreateColumnConfig {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    //当系统启动成功后,执行。
    @PostConstruct
    void init() {
        //2019年06月03日,表 LAMPS 新增 ERROR_CODE 字段
        //判断字段是否存在
        Integer i = jdbcTemplate.queryForObject("select count(*) from information_schema.columns where table_name = 'LAMPS' and column_name = 'ERROR_CODE';", Integer.class);
        if (i == 0){
            //新增字段
            jdbcTemplate.execute("alter table lamps ADD error_code integer(10);");
        }
        //2019年06月03日,表 LAMPS 新增 TEMPERATURE 字段
        i = jdbcTemplate.queryForObject("select count(*) from information_schema.columns where table_name = 'LAMPS' and column_name = 'TEMPERATURE';", Integer.class);
        if (i == 0){
            jdbcTemplate.execute("alter table lamps ADD temperature integer(10);");
        }

    }
}

如果大家有更好的实现方式,欢迎给我留言,谢谢。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值