SpringCloud系列----->SpringBoot項目中整合jooq和postgresql數據庫

前言: 公司的BI項目採取的是SpringBoot + Jooq + postgresql 組織形勢,現在將這個配置過程,詳細記錄下來。 Jooq和MyBatis和spring data jpa作用是一樣的,都是用來鏈接操作數據庫的。 Jooq的優點: (1)、DSL(Domain Specific Language )風格,代碼夠簡單和清晰。遇到不會寫的sql可以充分利用IDEA代碼提示功能輕鬆完成。 (2)、保留了傳統ORM 的優點,簡單操作性,安全性,類型安全等。不需要複雜的配置,並且可以利用Java 8 Stream API 做更加複雜的數據轉換。 (3)、支持主流的RDMS和更多的特性,如self-joins,union,存儲過程,複雜的子查詢等等。 (4)、豐富的Fluent API和完善文檔。 (5)、runtime schema mapping 可以支持多個數據庫schema訪問。簡單來說使用一個連接池可以訪問N個DB schema,使用比較多的就是SaaS應用的多租戶場景。 好了,不多囉嗦了,Jooq的詳細文檔還是請大家,看官方文檔:https://www.jooq.org/ 公司的項目是採用gradle 組織的,gradle和maven是一樣的,但是gradle的配置文件更清晰,maven的xml組織形式,囉嗦長,看着就暈,不簡潔。有關gradle和maven的相關詳細使用方法的請參考gradle和maven的官網。 閒話少勞聊,直接上build.gradle代碼,在代碼註釋中詳細說明每個配置的詳細的作用: plugins { id 'org.springframework.boot' version '2.1.3.RELEASE' #springboot版本 id 'java' #標識是java項目 id 'nu.studer.jooq' version '3.0.3' #jooq的版本號 } apply plugin: 'io.spring.dependency-management' apply plugin: 'jacoco' #引入生成文檔的jar包 group = 'com.jingdata.asset.manage.bi' #略 version = '0.0.1-SNAPSHOT' #略 sourceCompatibility = '1.8' #java版本 repositories { mavenLocal() mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-jooq' #springboot對jooq直接支持,jooq的springboot的starter implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-aop' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.aspectj:aspectjrt:1.6.11' implementation 'org.aspectj:aspectjweaver:1.6.11' implementation 'cglib:cglib:2.1' implementation 'org.springframework:spring-aop:4.3.9.RELEASE' implementation 'io.springfox:springfox-swagger2:2.8.0' implementation 'io.springfox:springfox-swagger-ui:2.8.0' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.1' compile("org.togglz:togglz-spring-boot-starter:2.6.1.Final") runtimeOnly 'org.postgresql:postgresql' #postgresql的鏈接支持 testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly 'org.projectlombok:lombok:1.18.2' jooqRuntime 'postgresql:postgresql:9.1-901-1.jdbc4' #postgresql的鏈接支持 } test { include '**/*Test.class' #單元測試命令,執行gradle test命令只會執行測試文件中以Test結尾的文件中的所有的測試方法。 } task testInteg(type: Test) { include '**/*Integ.class' #單元測試命令,執行gradle testInteg命令只會執行測試文件中以Integ結尾的文件中的所有的測試方法。 #之所以需要gradle test , gradle testInteg兩個命令,是因爲有些我們這裏需要區分涉及外部依賴(redis,mongodb,pg數據庫,elasticsearch等)的單元測試,和不涉及外部依賴的單元測試(內存中執行就行)。 #公司的項目要求,每次git push提交代碼和jenkins部署項目的時候需要執行一下gradle test 命令,確認修改的代碼沒有破壞以前的功能。 #測試同事在整個系統集成的時候,需要執行gradle test , gradle testInteg兩個命令,其中gradle test經常執行,gradle testInteg 在系統幾十個模塊集成的時候,會執行。 } #jooq配置,自動生成數據庫表和字段的對應關係的一系列的java class文件 jooq { version = '3.11.9' edition = 'OSS' sample(sourceSets.main) { jdbc { driver = 'org.postgresql.Driver' #jooq鏈接數據庫的驅動 url = 'jdbc:postgresql://127.0.0.1:5432/invest111' #數據庫鏈接地址 user = 'inves111' #連接數據庫的用戶名 password = 'invest111' #連接數據庫的密碼 } generator { name = 'org.jooq.codegen.DefaultGenerator' strategy { name = 'org.jooq.codegen.DefaultGeneratorStrategy' // ... } database() { name = 'org.jooq.meta.postgres.PostgresDatabase' inputSchema = 'public' #只生成public schema中的表 includes='paas_bi_.*|paas_datarights_.*|paas_mt_.*|paas_auth_.*|paas_org_.*' #只需要paas_bi 、 paas_datarights、paas_mt、paas_auth、paas_org 開頭的一系列的表。 } generate() {} target { packageName = 'com.jingdata.asset.manage.bi.assetmanagesystem.bidb' #生成文件夾的名字 directory = 'src/main/java' #生成文件所在的目錄 } } } } settings.gradle文件的內容: pluginManagement { repositories { gradlePluginPortal() } } rootProject.name = 'asset-manage-system' 所有這些配置完成後,就會如圖所示,執行這個命令,就會把數據庫中的表自動生成出來: ![1564371259390](https://yqfile.alicdn.com/23bcb12200ad1136ea627ee340584ecdcae8e30d.jpeg) 我們執行gradle test命令結果如下: ![2222](https://yqfile.alicdn.com/0457c862e6b19e4203ba81d8e772391c194d0730.jpeg) 會在項目的目錄下生成一個build文件夾,這個目錄下會有本次執行單元測試生成的單元測試報告,單元測試報告打開後是這樣一個效果: ![4444](https://yqfile.alicdn.com/4d75c24182206129c9e068eaf038c909b314981b.jpeg)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章