springboot jpa 动态加载 追加 切换数据源 支持启动无数据源

LCCP-DYNAMICDB-STARTER

Springboot动态追加数据源
🚀 动态追加切换,线上灵活运行🚀

LCCP(lower-code-create-platform)是一系列的微服务和starter包的出包平台的简称

LCCP-DYNAMICDB-STARTER是针对springboot项目提供数据源的动态控制的包

目的是为了支持工具类型的服务在现场能够在界面动态的切换数据库。
场景一:

1. **证书许可服务**正常启动后,需要导入安装许可来对服务进行初始化;
2. 安装许可就包含了现场的**数据库信息**,导入安装许可后,该证书服务才能被初始化完毕。<br/>

技术栈

springboot 2.3.4

spring-data-jpa 2.3.4

一定要看清版本,hibernate4和5是不兼容的。

特点功能

对于后端
  • 数据源切换后,可以自由选择是否生成表;
  • 数据源添加和切换方式灵活,可在项目中定制数据源的切换方式和数据源的持久化方式;
  • 配置简单,引入该starter包 ,仅需在配置文件中配置即可进行简单配置即可;
  • 支持二次开发,拓展更多的数据库支持类型;

使用方式展示

引入包

<dependency>
  <groupId>com.sdt</groupId>
  <artifactId>lccp-dynamicdb-starter</artifactId>
  <version>0.0.1.0</version>
</dependency>
yml配置
spring:
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate.naming.physical-strategy: org.hibernate.scripts.model.naming.PhysicalNamingStrategyStandardImpl

lccp:
  dynamic:
    datasource:
      enable: true
      dataSourceProvider: com.sdt.license.dynamic.provide.DynamicDataSourceProvider
      repositoryPath: com.sdt.license.*
      entityPath: com.sdt.license.*

和我们包相关的配置是spring.jpa下的配置和lccp下的配置。dynamic的配置是我们示例中持久化的位置。

启动类配置
@EnableTransactionManagement
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

启动的时候排除掉数据库和orm的自动装配的类。

数据源提供

public class DynamicDataSourceProvider implements IDataSourceProvider {

    @Override
    public RegisterDbConnReq getDbInfo(ApplicationContext applicationContext) {

        RegisterDbConnReq dbEntity = new RegisterDbConnReq();
        // 省去业务逻辑,自定义的数据源提供类,没有则直接返回空的连接信息
        return dbEntity;
    }
}

只要实现IDataSourceProvider接口即可。

对外提供的数据源操作接口

public interface IDynamicDataSourceService {

    /**
     * 添加数据库信息
     *
     * @param req 数据库信息
     */
    void addDbInfo(RegisterDbConnReq req);

    /**
     * 切换数据源
     *
     * @param dbName 数据源切换
     */
    void switchDB(String dbName);

    /**
     * 查看当前的DB信息集合
     *
     * @return 当前的db信息
     */
    List<RegisterDbConnReq> viewDB();

    /**
     * 删除指定的数据源
     *
     * @param dbName 默认的数据源名称
     */
    void deleteDBInfo(String dbName);
}

如何使用的示例地址:

license-server · master · 史皓燃 / lccp-cloud · GitLab

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值