# kit-jooq-spring-transaction **Repository Path**: thlws/kit-jooq-spring-transaction ## Basic Information - **Project Name**: kit-jooq-spring-transaction - **Description**: SpringBoot2 + MySql +JOOQ + Spring声明式事务处理 示例项目。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2019-01-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 框架说明 > 基于springboot2 + mysql + jooq 整合(含Spring事务支持) ### 使用说明 #### 生成JOOQ代码 JOOQ默认生成策略Table表名与POJO 名称一样,导致使用时很不方便,这里拓展了生成策略,代码请查阅下面这个class. `com.thlws.demojooq.strategy.JooqGeneratorStrategyExt` - 生成策略配置 jooq_config.xml ```xml com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/db1 root 123456 com.thlws.demojooq.strategy.JooqGeneratorStrategyExt org.jooq.codegen.JavaGenerator public\..*\.id override_primmary_key org.jooq.meta.mysql.MySQLDatabase .* db1 true true true true true com.thlws.demojooq.jooq src/main/java ``` - 数据源及事务配置 ```java @Configuration public class SpringConfig { private final Logger logger = LoggerFactory.getLogger(getClass()); private final DbConfig dbConfig; @Autowired public SpringConfig(DbConfig dbConfig) { this.dbConfig = dbConfig; } @PostConstruct private void init() { logger.debug("初始化db信息......"); } @Bean("jooqDataSource") public TransactionAwareDataSourceProxy transactionAwareDataSourceProxy(){ DataSource dataSource = DataSourceBuilder.create() .driverClassName(dbConfig.getDriver_class_name()) .password(dbConfig.getPassword()) .username(dbConfig.getUsername()) .url(dbConfig.getUrl()).build(); return new TransactionAwareDataSourceProxy(dataSource); } @Bean(name = "transactionManager") public DataSourceTransactionManager transactionManager(@Qualifier("jooqDataSource") TransactionAwareDataSourceProxy jooqDataSource){ return new DataSourceTransactionManager(jooqDataSource); } @Bean("jooqConfiguration") public DefaultConfiguration jooqConfiguration(@Qualifier("jooqDataSource") DataSource jooqDataSource ){ ExecuteListener executeListener = new ExceptionTranslator(); DataSourceConnectionProvider myConnectionProvider = new DataSourceConnectionProvider(jooqDataSource); DefaultExecuteListenerProvider executeListenerProvider = new DefaultExecuteListenerProvider(executeListener); DefaultConfiguration configuration = new DefaultConfiguration(); configuration.setConnectionProvider(myConnectionProvider); configuration.setExecuteListenerProvider(executeListenerProvider); configuration.setSQLDialect(SQLDialect.MYSQL); return configuration; } @Bean("myDSLContext") public DefaultDSLContext jooqDSLContext(@Qualifier("jooqConfiguration") DefaultConfiguration configuration ){ return new DefaultDSLContext(configuration); } } ``` 执行maven开始生成: `mvn jooq-codegen:generate` #### JOOQ示例 ``` //插入代码1 Demo demo = new Demo(); demo.setCreateTime(LocalDateTime.now()); DemoRecord demoRecord = dsl.newRecord(Tables.DEMO,demo); demoRecord.insert(); //插入代码2 dsl.insertInto(Tables.DEMO) .set(DemoTable.DEMO.PRIMARYKEY, System.currentTimeMillis()) .set(DemoTable.DEMO.NAME, "Hanley") .execute(); ``` ### 注意有坑 - 新版springboot 若使用servlet,filter时,必须配置包路径,否则会导致请求无法抵达controller - 当然也可以不在Application中配置,独立建立一个Configuration class,在加入Servlet ,Filter 配置 ### 参考资料 - [http://www.jooq.org/](http://www.jooq.org/) - [http://www.jooq.org/learn/](http://www.jooq.org/learn/) - [http://www.jooq.org/doc/3.11/manual/getting-started/tutorials/jooq-in-7-steps/](http://www.jooq.org/doc/3.11/manual/getting-started/tutorials/jooq-in-7-steps/) - [http://www.jooq.org/doc/3.11/manual-single-page](http://www.jooq.org/doc/3.11/manual-single-page) - [https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-jooq](https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-jooq) - [http://amao12580.github.io/post/2016/04/JOOQ-from-entry-to-improve/](http://amao12580.github.io/post/2016/04/JOOQ-from-entry-to-improve/)