SpringCloud微服务启动,自动生成数据库中的表

@Service
@RequiredArgsConstructor
@Slf4j
public class ProductInitTask implements ApplicationRunner {
    private final NetTypeRepository netTypeRepository;
    private final ProtocolTypeRepository protocolTypeRepository;
    private final CategoryRepository categoryRepository;


    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 检查是否已存在预定义的文档
        if (netTypeRepository.count() == 0) {
            // 如果不存在,则创建
            initializeNetTypes();
        }

        if (protocolTypeRepository.count() == 0) {
            initializeProtocolTypes();
        }
        if (categoryRepository.count() == 0) {
            initializeCategory();
        }
    }

    private void initializeNetTypes() {

        String[] predefinedNetTypes = {"WiFi", "NB-IoT", "蜂窝(2G/3G/4G/5G)", "以太网", "其他"};

        for (String netType : predefinedNetTypes) {
            NetType newNetType = new NetType();
            newNetType.setNetType(netType);
            try {
                netTypeRepository.save(newNetType);
            }catch (Exception e) {
                log.error("netType数据库异常" + e);
                throw new ServiceException(
                        ServiceException.ExceptionType.INTERNAL_FAILURE,
                        ExceptionInfoBuilder.build(ExceptionTemplate.INTERNAL_FAILURE_DATABASE, "数据库保存netType类型")
                );
            }
        }
    }

    private void initializeProtocolTypes() {

        String[] predefinedProtocolTypes = {"OPC", "LoRa", "BLE", "ZigeBee", "自定义"};

        for (String protocolType : predefinedProtocolTypes) {
            ProtocolType newProtocolType = new ProtocolType();
            newProtocolType.setProtocolType(protocolType);
            try {
                protocolTypeRepository.save(newProtocolType);
            }catch (Exception e) {
                log.error("protocol数据库异常" + e);
                throw new ServiceException(
                        ServiceException.ExceptionType.INTERNAL_FAILURE,
                        ExceptionInfoBuilder.build(ExceptionTemplate.INTERNAL_FAILURE_DATABASE, "数据库保存protocol类型")
                );
            }
        }
    }

    private void initializeCategory() {

        String[] predefinedCategory = {"物联网水表", "流量计", "压力计", "水质检测仪", "光电直读水表","电磁大表","超声波水表","其他"};

        for (String category : predefinedCategory) {
            Category newCategory = new Category();
            newCategory.setCategory(category);
            try {
                categoryRepository.save(newCategory);
            }catch (Exception e) {
                log.error("category数据库异常" + e);
                throw new ServiceException(
                        ServiceException.ExceptionType.INTERNAL_FAILURE,
                        ExceptionInfoBuilder.build(ExceptionTemplate.INTERNAL_FAILURE_DATABASE, "数据库保存category类型")
                );
            }
        }
    }

}

自动生成数据库中的表,注意要考虑每次重启服务时做了什么事想要什么效果;

如果不需要灵活可随时添加新数据的表的话,则可以用枚举计不用像这样麻烦了;

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值