在springboot中使用jdbcTemplate(4)

一般情况下,我们在项目中使用的数据源DataSource都是写在properties文件中,很少会改变

但有些项目中,数据源会经常发生改变,如果我们不想改代码、编译打包等一系列操作,就需要考虑能否动态新增数据源信息。

实际上,这当然是可以的。

我们只需要初始化一个Map,将动态新增的JdbcTemplate存放在map中即可

public final static Map<String, JdbcTemplate> dsMap = new ConcurrentHashMap<>();
复制代码
public static JdbcTemplate setJdbcTemplate(String name, String url, String username, String password) {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        JdbcTemplate jdbcTemplate = new JdbcTemplate(druidDataSource);
        dsMap.put(name, jdbcTemplate);
        return jdbcTemplate;
    }
复制代码

然而实际项目中,一般是这样的,在项目启动时我们已经能确定一些数据源,那么这些应该怎么办呢?

其实很简单,只需要在项目启动时对这些已有数据源先进行初始化

复制代码
public static void initJdbcTemplate()  {
        ClassPathResource resource = new ClassPathResource("datasource.properties");
        InputStream inputStream = null;
        Properties properties = new Properties();
        try {
            inputStream = resource.getInputStream();
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

        String name = properties.getProperty("name");
        String url = properties.getProperty("url");
        String username = properties.getProperty("username");
        String password = properties.getProperty("password");
        JdbcTemplate jdbcTemplate = setJdbcTemplate(name, url, username, password);
        //初始化api其他数据源
        List<JdbcConfig> configs = jdbcTemplate.query("select * from jdbc_config", new BeanPropertyRowMapper<>(JdbcConfig.class));
        for (JdbcConfig config : configs) {
            setJdbcTemplate(config);
        }

    }
复制代码

这样操作下来,既可以在项目初期初始化已有的数据源,又可以在服务运行中动态添加,已经完美解决了我们的问题。

posted @   Mars.wang  阅读(174)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示