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