# PowerJob-PostgreSQL **Repository Path**: lichenfei_fei/power-job-postgre-sql ## Basic Information - **Project Name**: PowerJob-PostgreSQL - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-19 - **Last Updated**: 2024-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 官方仓库 https://gitee.com/KFCFans/PowerJob ### 说明 - 本项目解决了 PostgreSQL 数据库适配的相关问题。 - 创建数据库(不用创建表结构),修改配置文件,启动项目即可自动生成表结构。 ```properties spring.datasource.core.driver-class-name=org.postgresql.Driver spring.datasource.core.jdbc-url=jdbc:postgresql://127.0.0.1:5432/powerjob-database?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true spring.datasource.core.username=postgres spring.datasource.core.password=postgres ``` - 启动项目:[powerjob-server-starter](powerjob-server/powerjob-server-starter) - 项目启动成功,访问 http://localhost:7700/ 即可查看接口文档。 - 执行应用注册:`powerjob-worker-samples` ![img.png](img.png) - 登录,账户:`powerjob-worker-samples` 密码:`powerjob-worker-samples` - 启动项目:[powerjob-worker-samples](powerjob-worker-samples) - 新建任务: 两个要用到的参数 1. 0/20 * * * * ? 2. tech.powerjob.samples.processors.SimpleProcessor - 新建任务如下 ![img_1.png](img_1.png) - 这时候任务就运行了,可以查看日志。 ![img_2.png](img_2.png) #### 打包跳过单元测试 mvn -DskipTests=true clean package ### 修改了什么 1. 为什么修改:作者已经说了,@Lob 注解对应的字段是text,但是这个注解会使创建表时使用oid类型,故做修改。 ```java package tech.powerjob.server.persistence.config.dialect; import lombok.extern.slf4j.Slf4j; import org.hibernate.dialect.PostgreSQL10Dialect; import org.hibernate.type.descriptor.sql.LongVarcharTypeDescriptor; import org.hibernate.type.descriptor.sql.SqlTypeDescriptor; import java.sql.Types; /** * PostgreSQL 数据库支持,需要在 application.properties 中添加以下配置项进行激活 * spring.datasource.remote.hibernate.properties.hibernate.dialect=tech.powerjob.server.persistence.config.dialect.PowerJobPGDialect * * @author Kung Yao * @author Echo009 * 2021/3/24 下午 04:23 * 1074_King */ @Slf4j public class PowerJobPGDialect extends PostgreSQL10Dialect { /** * 使用 {@link Types#LONGVARCHAR} 覆盖 {@link Types#CLOB} 类型 *

* 注意,如果在 PG 库创建表时使用的列类型为 oid ,那么这样会导致没法正确读取数据 * 在 PowerJob 中能这样用是因为 PowerJob 的所有实体类中被 @Lob 注解标记的列对应数据库中的字段类型都是 text * 另外还需要注意数据库版本,如果是 10.x 以前的,需自行提供一个合适的 Dialect 类(选择合适的版本继承) *

* 更多内容请关注该 issues:https://github.com/PowerJob/PowerJob/issues/153 */ @Override public SqlTypeDescriptor getSqlTypeDescriptorOverride(int sqlCode) { // log.info("Types.CLOB : {}, sqlCode : {} ", Types.CLOB, sqlCode); return Types.CLOB == sqlCode ? LongVarcharTypeDescriptor.INSTANCE : null; } } ``` 1. 删除所有`@Lob`注解,将`@Column`修改为`@Column(columnDefinition = "text")`,让创建数据库时自动创建`text` 类型的字段,而不是oid类型字段。 2. 修改前 ```java @Lob @Column private String jobParams; ``` 2. 修改后 ```java @Column(columnDefinition = "text") private String jobParams; ```