自定义数据连接

教学视频

说明

Bask Report基于java.util.ServiceLoader机制支持自定义的数数据源,对应的接口:

public interface BuildinDatasourceProvider {
    /**
     * 根据DatasourceDefinition的定义生成java.sql.DataSource对象
     * @param def
     * @return
     */
    DataSource buildDatasource(DatasourceDefinition def);

    /**
     * 销毁java.sql.DataSource对象
     * @param ds
     */
    void destroyDatasource(DatasourceWrapper ds);
}

全路径为:com.basksoft.report.core.model.datasource.BuildinDatasourceProvider

前期准备-ServiceLoader定义

分下面几个步骤来使用:

  1. 在resources资源目录下创建META-INF/services文件夹
  2. 在services文件夹中创建文件,以接口全名命名,就是:com.basksoft.report.core.model.datasource.BuildinDatasourceProvider
  3. 创建接口实现类,参考代码

    import com.basksoft.report.core.definition.datasource.DatasourceDefinition;
    import com.basksoft.report.core.model.datasource.BuildinDatasourceProvider;
    import com.basksoft.report.core.model.datasource.DatasourceWrapper;
    import org.apache.commons.dbcp2.BasicDataSource;
    import org.apache.commons.dbcp2.BasicDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class TestBuildinDatasource implements BuildinDatasourceProvider {
        private static Properties properties = new Properties();
        @Override
        public DataSource buildDatasource(DatasourceDefinition def) {
            // 加载DBCP配置文件
            DataSource dataSource = null;
            properties.put("username", "root");
            properties.put("password", "xxxxx");
            properties.put("driverClassName", "com.mysql.jdbc.Driver");
            properties
                    .put("url",
                            "jdbc:mysql://localhost:3306/baskreportsample?useUnicode=true&characterEncoding=UTF-8");
            try {
                dataSource = BasicDataSourceFactory.createDataSource(properties);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return dataSource;
        }
    
        @Override
        public void destroyDatasource(DatasourceWrapper ds) {
            if (ds == null)
                return;
            DataSource datasource = ds.getDatasource();
            if (datasource instanceof BasicDataSource) {
                BasicDataSource basicDatasource = (BasicDataSource) datasource;
                try {
                    basicDatasource.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  4. 修改META-INF/services下的com.basksoft.report.core.model.datasource.BuildinDatasourceProvider文件
xxx.xxx.xxx.TestBuildinDatasource

设计器使用

在报表设计器的右侧找到数据源定义的设计面板:

image-20210412092228435

首先选择数据源标签,并单击+快捷按钮为报表文件添加JNDI数据源。

image-20210412092413738

image-20210412143903307

可以单击测试连接的按钮测试配置:

image-20210412144038673

如果一切正确,则会出现如下弹出提示框:

image-20210412100051973

这就表示数据库连接配置成功。

results matching ""

    No results matching ""