Skip to content

数据源配置

数据源类型

数据源是指提供数据的来源,Luck-Report 提供了三种类型的报表数据源,分别是:

  • Jdbc 数据源:直连数据库实例的原生数据源
  • Spring Bean 数据源:Spring 容器中注册 Bean 作为数据源
  • 内置数据源:实现 BuildinDatasource 接口的数据源

Jdbc 数据源

Jdbc 数据源是直连数据库实例的原生数据源,支持主流数据库(如 MySQL、Oracle、PostgreSQL 等)

配置步骤

  1. 添加数据库驱动:在 luck-report-pubpom.xml 文件中添加数据库驱动 Jar 包依赖
  2. 打开数据源配置:在报表设计器中点击 "添加数据库连接"
  3. 填写连接信息:在弹出的窗口中配置数据源连接信息(如数据库 URL、用户名、密码等)
  4. 测试连接:点击测试连接按钮,验证数据库连接是否可用
  5. 保存配置:点击确定,Jdbc 数据源添加成功

设计器配置

  1. 在报表设计器中点击 "添加数据库连接"
    选择连接数据源
  2. 在弹出的窗口中配置数据源连接信息(如数据库 URL、用户名、密码等)
    数据库连接弹窗

Spring Bean 数据源

Spring Bean 数据源使用 Spring 容器中注册的 Bean 来提供报表数据

配置步骤

  1. 定义 Spring Bean:在后端项目中创建一个类并注册为 Spring Bean,通过 @Component@Service 等注解指定 Bean ID
  2. 添加数据查询方法:在 Bean 中定义数据查询方法,方法必须符合规范(见下方参数说明)
  3. 在设计器中配置:在报表设计器中添加 Spring Bean 数据源,输入数据源名称和对应的 Bean ID
  4. 测试验证:点击确定完成配置,即可在报表中使用该数据源

方法参数说明

数据查询方法签名:public List<?> methodName(String dsName, String datasetName, Map<String,Object> params)

参数顺序参数名类型含义说明
1dsNameString数据源名称:报表设计器里配置的 Spring Bean 数据源自定义名称,用于区分同一个 Bean 绑定的多组数据源配置
2datasetNameString数据集名称:当前执行查询的数据集标识,同一数据源下可配置多个数据集,靠该字段区分调用逻辑
3paramsMap<String,Object>报表全量入参集合:汇总前端 URL 传参、报表页面定义参数、代码渲染时手动传入的所有报表参数,业务从 Map 取 key 获取筛选条件

补充说明:

  • 使用场景:同一 Bean 可被多个数据源/数据集复用,通过前两个字符串参数做分支判断,区分不同报表的数据查询逻辑
  • 取值示例params.get("startDate") 获取报表传入的起始时间,用于 SQL/业务查询过滤数据
  • 返回规范:支持 List<Map<String,Object>>List<实体POJO> 两种返回格式,集合单元素代表报表一行数据

配置示例

以下示例定义了一个 Bean ID 为 testBean 的数据源,包含两个数据查询方法:

TestBean.java

java
package com.luck.report.web.test;

import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Spring Bean 数据源示例
 * Bean ID: testBean
 */
@Component("testBean")
public class TestBean {

    /**
     * 数据查询方法示例1(返回 Map 列表)
     * @param dsName 数据源名称
     * @param datasetName 数据集名称
     * @param parameters 报表参数集合
     * @return 数据列表
     */
    public List<Map<String,Object>> loadReportData(String dsName, String datasetName, Map<String,Object> parameters){
        List<Map<String, Object>> list = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            Map<String, Object> m = new HashMap<String, Object>();
            m.put("id", i);
            list.add(m);
        }
        return list;
    }

    /**
     * 数据查询方法示例2(返回实体对象列表)
     * @param dsName 数据源名称
     * @param datasetName 数据集名称
     * @param parameters 报表参数集合
     * @return 用户列表
     */
    public List<User> buildReport(String dsName, String datasetName, Map<String,Object> parameters){
        List<User> list = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            User user = new User();
            user.setId((long) i);
            user.setName("用户" + i);
            user.setAge(20 + (i % 50));
            list.add(user);
        }
        return list;
    }
}

设计器配置

  1. 在报表设计器中点击 "添加 Spring Bean 连接"
    选择spring数据源
  2. 输入数据源名称和对应的 Bean ID
    spring连接弹窗
  3. 点击确定,Spring Bean 数据源添加成功

内置数据源

内置数据源通过实现 BuildinDatasource 接口自定义数据源连接逻辑,适用于需要动态获取数据库连接或集成现有连接池的场景。

接口方法说明

BuildinDatasource 接口核心方法:

方法名返回类型说明
name()String返回数据源名称(在设计器中显示)
getConnection()Connection获取数据库连接对象

配置步骤

  1. 实现接口:创建类实现 com.luck.report.core.definition.datasource.BuildinDatasource 接口
  2. 注册 Bean:将实现类注册为 Spring Bean(使用 @Configuration@Component 等注解)
  3. 实现方法:实现 name() 方法返回数据源名称,实现 getConnection() 方法返回数据库连接
  4. 在设计器中配置:在报表设计器中添加内置数据源,选择已注册的数据源名称

配置示例

以下示例展示了如何将 Spring 容器中的 DataSource 注册为内置数据源:

java
package com.luck.report.web.config;

import com.luck.report.core.definition.datasource.BuildinDatasource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * 内置数据源配置
 * @author luck
 */
@Configuration
public class DatasourceConfig implements BuildinDatasource {

    @Resource
    private DataSource dataSource;

    private final Logger log = LoggerFactory.getLogger(getClass());

    /**
     * 数据源名称(在设计器中显示的名称)
     * @return 数据源名称
     */
    @Override
    public String name() {
        return "myUReportDatasource";
    }

    /**
     * 获取数据库连接
     * @return 数据库连接对象
     */
    @Override
    public Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            log.error("数据源获取连接失败!", e);
        }
        return null;
    }
}

设计器配置

  1. 在报表设计器中点击 "添加内置数据源连接"
    选择内置数据源
  2. 选择已注册的内置数据源
    内置连接弹窗
  3. 点击确定,内置数据源添加成功

Luck-Report 报表引擎