結(jié)合jdbcTemplate動態(tài)注入數(shù)據(jù)源的示例分析

這篇文章給大家介紹結(jié)合jdbcTemplate動態(tài)注入數(shù)據(jù)源的示例分析,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了濟源免費建站歡迎大家使用!

結(jié)合jdbcTemplate動態(tài)注入數(shù)據(jù)源

maven配置

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>MySQL</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>

數(shù)據(jù)庫設(shè)計

CREATE TABLE `data_source` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `source_name` varchar(32) DEFAULT NULL COMMENT '數(shù)據(jù)源名稱',
  `source_code` varchar(12) DEFAULT NULL COMMENT '數(shù)據(jù)源編碼',
  `source_type` tinyint(2) DEFAULT NULL COMMENT '數(shù)據(jù)源類型(1 mysql)',
  `url` varchar(128) DEFAULT NULL COMMENT 'URL',
  `user_name` varchar(64) DEFAULT NULL COMMENT '用戶名',
  `password` varchar(64) DEFAULT NULL COMMENT '密碼',
  `state` tinyint(2) NOT NULL COMMENT '狀態(tài)(0停用 1啟用)',
  `create_by` varchar(20) DEFAULT NULL COMMENT '創(chuàng)建人',
  `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
  `update_by` varchar(20) DEFAULT NULL COMMENT '修改人',
  `update_time` datetime DEFAULT NULL COMMENT '修改時間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='數(shù)據(jù)源';

LocalCacheUtil

public class LocalCacheUtil {


    private static ConcurrentMap<String, DruidDataSource> cacheRepository = new ConcurrentHashMap<String, DruidDataSource>();

    /**
     * set cache
     *
     * @param key
     * @param dataSource
     * @return
     */
    public static boolean set(String key, DruidDataSource dataSource){
        // set new cache
        if (key==null || key.trim().length()==0) {
            return false;
        }
        cacheRepository.put(key, dataSource);
        return true;
    }

    /**
     * get cache
     *
     * @param key
     * @return
     */
    public static DruidDataSource get(String key){
        if (key==null || key.trim().length()==0) {
            return null;
        }
        DruidDataSource localCacheData = cacheRepository.get(key);
        if (localCacheData!=null) {
            return localCacheData;
        } else {
            return null;
        }
    }

}

JobDataSourceDO

@Data
@TableName("data_source")
public class JobDataSourceDO implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 
	 */
	@TableId(value = "ID", type = IdType.AUTO)
	private Long id;
	/**
	 * 數(shù)據(jù)源名稱
	 */
	private String sourceName;
	/**
	 * 數(shù)據(jù)源編碼
	 */
	private String sourceCode;
	/**
	 * 數(shù)據(jù)源類型(1 mysql 2 MongoDB)
	 */
	private Integer sourceType;
	/**
	 * URL
	 */
	private String url;
	/**
	 * 用戶名
	 */
	private String userName;
	/**
	 * 密碼
	 */
	private String password;
	/**
	 * 狀態(tài)(0停用 1啟用)
	 */
	private Integer state;
	/**
	 * 創(chuàng)建人
	 */
	private String createBy;
	/**
	 * 創(chuàng)建時間
	 */
	private Date createTime;
	/**
	 * 修改人
	 */
	private String updateBy;
	/**
	 * 修改時間
	 */
	private Date updateTime;

}

BaseQueryTool

public class BaseQueryTool {

    protected static final Logger logger = LoggerFactory.getLogger(BaseQueryTool.class);
    private static ConcurrentMap<String, JdbcTemplate> cacheJdbcTemplate = new ConcurrentHashMap<String, JdbcTemplate>();

    private DruidDataSource druidDataSource;
    private JdbcTemplate jdbcTemplate;
    /**
     * @param jobDatasource
     */
    BaseQueryTool(JobDataSourceDO jobDatasource) {
        logger.info("獲取數(shù)據(jù)源-------------------{}", JSON.toJSONString(jobDatasource));
        try{
            if (LocalCacheUtil.get(jobDatasource.getSourceName()) == null) {
                druidDataSource = getDataSource(jobDatasource);
                LocalCacheUtil.set(jobDatasource.getSourceName(),druidDataSource);
            } else {
                druidDataSource = LocalCacheUtil.get(jobDatasource.getSourceName());
            }
            if (BaseQueryTool.cacheJdbcTemplate.get(jobDatasource.getSourceName()) == null) {
                JdbcTemplate  jdbcTemplate = new JdbcTemplate();
                jdbcTemplate.setDataSource(druidDataSource);
                BaseQueryTool.cacheJdbcTemplate.put(jobDatasource.getSourceName(),jdbcTemplate);
                this.jdbcTemplate = jdbcTemplate;
            } else {
                this.jdbcTemplate = BaseQueryTool.cacheJdbcTemplate.get(jobDatasource.getSourceName());
            }
            logger.info("開始獲取數(shù)據(jù)源連接數(shù)-------------------,{},{}",druidDataSource.getInitialSize(),druidDataSource.getActiveCount());

        }catch (Throwable e){
            logger.error("獲取數(shù)據(jù)源-------------------{}",JSON.toJSONString(e));
        }
        logger.info("獲取數(shù)據(jù)源-------------------");
    }

    private DruidDataSource  getDataSource(JobDataSourceDO jobDatasource){
        DruidDataSource  dataSource = new DruidDataSource ();
        dataSource.setUsername(jobDatasource.getUserName());
        dataSource.setPassword(jobDatasource.getPassword());
        dataSource.setUrl(jobDatasource.getUrl());
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setInitialSize(5);
        dataSource.setMinIdle(5);
        dataSource.setMaxActive(50);
        dataSource.setMaxWait(60000);
        dataSource.setTimeBetweenEvictionRunsMillis(60000);
        dataSource.setMinEvictableIdleTimeMillis(30000);
        dataSource.setValidationQuery("SELECT 1 FROM DUAL");
        dataSource.setTestWhileIdle(true);
        dataSource.setTestOnBorrow(false);
        dataSource.setTestOnReturn(false);
        dataSource.setPoolPreparedStatements(true);
        return dataSource;
    }


    public JSONArray getArrByQuerySql(String querySql) {
        return jdbcTemplate.query(querySql,new ResultSetExtractor<JSONArray>() {
            @Override
            public JSONArray extractData(ResultSet resultSet) throws SQLException, DataAccessException {
                ResultSetMetaData rsd = resultSet.getMetaData();
                int clength = rsd.getColumnCount();
                JSONArray ja = new JSONArray();
                String columnName;
                try {
                    while (resultSet.next()) {
                        JSONObject jo = new JSONObject();
                        for (int i = 0; i < clength; i++) {
                            columnName = rsd.getColumnLabel(i + 1);
                            jo.put(columnName, resultSet.getObject(i + 1));
                        }
                        ja.add(jo);
                    }
                } catch (Exception e) {

                }
                return ja;
            }
        });
    }

}

使用

 JobDataSourceDO dataSourceDO = new JobDataSourceDO();
            dataSourceDO.setPassword(queryJobDefinitionByJobcode.getPassword());
            dataSourceDO.setUserName(queryJobDefinitionByJobcode.getUserName());
            dataSourceDO.setUrl(queryJobDefinitionByJobcode.getUrl());
            dataSourceDO.setSourceType(queryJobDefinitionByJobcode.getSourceType());
            dataSourceDO.setSourceName(queryJobDefinitionByJobcode.getSourceName());
JSONArray array = baseQueryTool.getArrByQuerySql(respBO.getRunSql());

關(guān)于結(jié)合jdbcTemplate動態(tài)注入數(shù)據(jù)源的示例分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享文章:結(jié)合jdbcTemplate動態(tài)注入數(shù)據(jù)源的示例分析
當前URL:http://muchs.cn/article18/ghgdgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站營銷、全網(wǎng)營銷推廣網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、標簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管