• 在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);
            }
    
        }

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

  • 相关阅读:
    Hibernate动态更新
    Spring MVC实现文件上传
    windows 常用命名
    有用的SQL查询
    SQL语句、EF DataAnnotation和EF Fluent API方式创建联合主键
    EF6学习笔记三十二:性能优化——实体缓存和翻译缓存
    EF6学习笔记三十一:性能优化(二)
    EF6学习笔记三十:性能优化——预编译视图
    EF6学习笔记二十九:并发冲突(三)
    EF6学习笔记二十八:并发冲突(二)
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15209548.html
Copyright © 2020-2023  润新知