在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 @ 2021-08-31 11:32  Mars.wang  阅读(172)  评论(0编辑  收藏  举报