数据源配置
数据源类型
数据源是指提供数据的来源,Luck-Report 提供了三种类型的报表数据源,分别是:
- Jdbc 数据源:直连数据库实例的原生数据源
- Spring Bean 数据源:Spring 容器中注册 Bean 作为数据源
- 内置数据源:实现 BuildinDatasource 接口的数据源
Jdbc 数据源
Jdbc 数据源是直连数据库实例的原生数据源,支持主流数据库(如 MySQL、Oracle、PostgreSQL 等)
配置步骤
- 添加数据库驱动:在
luck-report-pub的pom.xml文件中添加数据库驱动 Jar 包依赖 - 打开数据源配置:在报表设计器中点击 "添加数据库连接"
- 填写连接信息:在弹出的窗口中配置数据源连接信息(如数据库 URL、用户名、密码等)
- 测试连接:点击测试连接按钮,验证数据库连接是否可用
- 保存配置:点击确定,Jdbc 数据源添加成功
设计器配置
- 在报表设计器中点击 "添加数据库连接"

- 在弹出的窗口中配置数据源连接信息(如数据库 URL、用户名、密码等)

Spring Bean 数据源
Spring Bean 数据源使用 Spring 容器中注册的 Bean 来提供报表数据
配置步骤
- 定义 Spring Bean:在后端项目中创建一个类并注册为 Spring Bean,通过
@Component、@Service等注解指定 Bean ID - 添加数据查询方法:在 Bean 中定义数据查询方法,方法必须符合规范(见下方参数说明)
- 在设计器中配置:在报表设计器中添加 Spring Bean 数据源,输入数据源名称和对应的 Bean ID
- 测试验证:点击确定完成配置,即可在报表中使用该数据源
方法参数说明
数据查询方法签名:public List<?> methodName(String dsName, String datasetName, Map<String,Object> params)
| 参数顺序 | 参数名 | 类型 | 含义说明 |
|---|---|---|---|
| 1 | dsName | String | 数据源名称:报表设计器里配置的 Spring Bean 数据源自定义名称,用于区分同一个 Bean 绑定的多组数据源配置 |
| 2 | datasetName | String | 数据集名称:当前执行查询的数据集标识,同一数据源下可配置多个数据集,靠该字段区分调用逻辑 |
| 3 | params | Map<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;
}
}设计器配置
- 在报表设计器中点击 "添加 Spring Bean 连接"

- 输入数据源名称和对应的 Bean ID

- 点击确定,Spring Bean 数据源添加成功
内置数据源
内置数据源通过实现 BuildinDatasource 接口自定义数据源连接逻辑,适用于需要动态获取数据库连接或集成现有连接池的场景。
接口方法说明
BuildinDatasource 接口核心方法:
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| name() | String | 返回数据源名称(在设计器中显示) |
| getConnection() | Connection | 获取数据库连接对象 |
配置步骤
- 实现接口:创建类实现
com.luck.report.core.definition.datasource.BuildinDatasource接口 - 注册 Bean:将实现类注册为 Spring Bean(使用
@Configuration、@Component等注解) - 实现方法:实现
name()方法返回数据源名称,实现getConnection()方法返回数据库连接 - 在设计器中配置:在报表设计器中添加内置数据源,选择已注册的数据源名称
配置示例
以下示例展示了如何将 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;
}
}设计器配置
- 在报表设计器中点击 "添加内置数据源连接"

- 选择已注册的内置数据源

- 点击确定,内置数据源添加成功