【发布时间】:2019-08-04 06:20:39
【问题描述】:
最近我开始使用 jooq 作为我的 java 项目的数据库层。这是我的组织,我们的应用程序数据库有不同的数据库名称(即 DevOps 管道)。
请考虑以下信息:
- 假设我的应用程序名称是 MY_APPLICATION。
- 假设 MY_APPLICATION 使用数据库 MY_DB(这是基于 MySQL 的,其中有一些表)。
让我们考虑以下信息来部署 MY_APPLICATION:
- 每当我们在开发配置文件中进行部署时,我们原来的 MY_DB 将变为 DEV_MY_DB(只有 DB 名称需要更改,表相同)。
- 每当我们在阶段配置文件中进行部署时,我们原来的 MY_DB 将变为 STG_MY_DB。
- 每当我们在生产配置文件中进行部署时,我们原来的 MY_DB 都会变成 PROD_MY_DB。
我想在构建时从 JOOQ 实现 MY_DB 代码生成(通过 Jenkins 构建作业)。如果我在开发配置文件上构建 MY_APPLICATION,JOOQ 应该为模式名称 DEV_MY_DB 生成数据库类。舞台和产品也是如此。
这是我正在使用的 JOOQ 代码生成器实用程序。
public static void init(String p_catalog_name, String p_schema_name, String p_db_username,
String p_db_password, String p_db_url) {
Target l_target = new Target();
l_target.setDirectory("IdeaProjects/paas/css/src/main/java");
l_target.setPackageName("com.myorg.paas.css.db.entity");
Configuration configuration =
new Configuration()
.withJdbc(
new Jdbc()
.withDriver("com.mysql.cj.jdbc.Driver")
.withUrl(p_db_url)
.withUser(p_db_username)
.withPassword(p_db_password)
)
.withGenerator(
new Generator()
.withDatabase(
new Database()
.withName("org.jooq.meta.mysql.MySQLDatabase")
.withIncludes(".*")
.withExcludes("")
//.withInputCatalog(p_catalog_name)
.withInputSchema(p_schema_name)
.withForcedTypes(
new ForcedType()
.withUserType("java.time.LocalDateTime")
.withConverter(
"com.paas.css.startup.jooq.TimestampToLocalDateTime")
.withExpression(
"created_at | updated_at | start_date "
+ "| end_date | start_time | end_time | "
+ "next_trigger_start_at | next_trigger_end_at")
.withTypes(".*"),
new ForcedType()
.withUserType("com.paas.css.utils.DefaultMap")
.withConverter(
"com.paas.css.startup.jooq.ObjectToJsonMapConverter")
.withExpression(
"running_days | transaction_details | "
+ "| reward_details | triggers | life ")
.withTypes(".*")))
.withTarget(l_target));
try {
GenerationTool.generate(configuration);
} catch (Exception ex) {
System.out.println();
ex.printStackTrace();
}
}
谁能帮我存档?
【问题讨论】: