日期:2014-05-16  浏览次数:20412 次

Jira插件开发中使用jdbc

在Jira的插件开发中是可以使用jdbc的,如果读者有JIRA Development Cookbook这本书,可以参看362页,Connection对象可以直接得到

Connection conn = new DefaultOfBizConnectionFactory().getConnection();

?但是就算我们拿到了Connection直接写jdbc代码是很痛苦的,如果能使用Spring提供的JdbcTemple那会好很多,初始化JdbcTemple需要DataSource,在Jira的api里面我实在没找到能得到DataSource的办法,但是我可以得到数据库的连接信息

DatasourceInfo datasourceInfo = new DefaultOfBizConnectionFactory().getDatasourceInfo();
JdbcDatasourceInfo jdbcDatasourceInfo = datasourceInfo.getJdbcDatasource();
//数据库连接信息
jdbcDatasourceInfo.getUsername();
jdbcDatasourceInfo.getPassword();
jdbcDatasourceInfo.getDriverClassName();
jdbcDatasourceInfo.getUri();

?有了这些信息就好办了,我写了工厂来帮我产生DataSource

import com.atlassian.jira.ofbiz.DefaultOfBizConnectionFactory;
import org.apache.commons.dbcp.BasicDataSource;
import org.ofbiz.core.entity.config.DatasourceInfo;
import org.ofbiz.core.entity.config.JdbcDatasourceInfo;

public class DataSourceFactory {
    private static BasicDataSource dataSource;

    public static BasicDataSource getDataSource() {
        if (dataSource == null) {
            DatasourceInfo datasourceInfo = new DefaultOfBizConnectionFactory().getDatasourceInfo();
            JdbcDatasourceInfo jdbcDatasourceInfo = datasourceInfo.getJdbcDatasource();
            dataSource = new BasicDataSource();
            dataSource.setUsername(jdbcDatasourceInfo.getUsername());
            dataSource.setPassword(jdbcDatasourceInfo.getPassword());
            dataSource.setDriverClassName(jdbcDatasourceInfo.getDriverClassName());
            dataSource.setUrl(jdbcDatasourceInfo.getUri());
            //一下参数根据情况做配置
            dataSource.setInitialSize(3);
            dataSource.setMaxActive(20);
            dataSource.setMaxIdle(6);
            dataSource.setMaxWait(30000);
            dataSource.setDefaultAutoCommit(true);
            dataSource.setValidationQuery("select 1");
            dataSource.setValidationQueryTimeout(3);
            dataSource.setRemoveAbandoned(true);
            dataSource.setRemoveAbandonedTimeout(300);
            dataSource.setTestOnBorrow(true);
            dataSource.setTestOnReturn(true);
            dataSource.setTestWhileIdle(true);
            dataSource.setTimeBetweenEvictionRunsMillis(300000);
            dataSource.setMinEvictableIdleTimeMillis(60000);
        }
        return dataSource;
    }
}

?既然DataSource得到了,JdbcTemple也就好办了

?

在Jira的lib环境里面是没有spring-jdbc的jar包的,如果需要使用JdbcTemple还需要引入该jar

顺便聊聊如何在Jira的插件开发中引入第三方jar

在项目的resources目录下建立文件夹META-INF,META-INF下继续建立文件夹lib,然后将第三方的jar文件放到这里即可