diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 72f2b08..918d58c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -24,7 +24,7 @@ env:
MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true
jobs:
- # We only execute nativeTest on `dynamic-datasource-spring-boot3-starter`, since only Spring Boot OSS 3 support provides support for GraalVM Native Image
+ # We only execute nativeTest on `dynamic-datasource-spring-boot3-starter`, since only Spring Boot OSS 3 provides support for GraalVM Native Image
test-graalvm-ce-ci:
name: NativeTest CI - GraalVM CE ${{ matrix.java-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
@@ -33,7 +33,7 @@ jobs:
strategy:
matrix:
os: [ ubuntu-latest ]
- java-version: [ '17.0.8' ]
+ java-version: [ '21' ]
steps:
- uses: actions/checkout@v3
- uses: graalvm/setup-graalvm@v1
@@ -44,7 +44,7 @@ jobs:
cache: 'maven'
- name: Build Spring Boot Starter 3 test with Maven
run: |
- ./mvnw -am -pl dynamic-datasource-spring-boot3-starter -PnativeTestInSpringBoot -T1C -B -e clean test
+ ./mvnw -PnativeTestInSpringBoot -T1C -B -e clean test
test-hotspot-jdk-ci:
name: Test CI - JDK ${{ matrix.java-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
@@ -52,7 +52,7 @@ jobs:
strategy:
matrix:
os: [ ubuntu-latest ]
- java-version: [ '17', '20' ]
+ java-version: [ '17', '21-ea' ]
steps:
- uses: actions/checkout@v3
- name: Setup java
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 506cd9a..11f5b27 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -41,13 +41,13 @@ failed to discover tests 的测试库。
sudo apt install unzip zip curl sed -y
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
-sdk install java 17.0.8-graalce
-sdk use java 17.0.8-graalce
+sdk install java 21-graalce
+sdk use java 21-graalce
sudo apt-get install build-essential libz-dev zlib1g-dev -y
git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/
-./mvnw -am -pl dynamic-datasource-spring-boot3-starter -PnativeTestInSpringBoot -T1C -B clean test
+./mvnw -PnativeTestInSpringBoot -T1C -e clean test
```
贡献者在提交 PR 后,位于 Github Actions 的 CI 将进行此验证。如果 nativeTest 执行失败,请跳转到[本文的 2.2 一节](./CONTRIBUTING.md)。
@@ -69,8 +69,6 @@ System Property 屏蔽部分单元测试在 GraalVM Native Image 下运行。
调整 Maven Profile 和 GraalVM Tracing Agent 的 Filter 链。
以下命令仅为 `dynamic-datasource-spring-boot3-starter` 生成 Conditioanl 形态的 GraalVM Reachability Metadata 的一个举例。
-在 https://github.com/graalvm/native-build-tools/issues/500 关闭之前,你都需要手动调整 `native-image-configure` 的 `input-dir`
-为 `./mvnw -PgenerateMetadata -DskipNativeTests -e clean test` 真实的输出目录。
对于测试类和测试文件独立使用的 GraalVM Reachability Metadata,贡献者应该放置到相关子模块对应的
`${project.basedir}/src/test/resources/META-INF/native-image/${project.artifactId}-test-metadata/` 文件夹下。`${}` 内为
@@ -78,20 +76,9 @@ POM 4.0 的常规系统变量,自行替换。
```bash
git clone git@github.com:baomidou/dynamic-datasource.git
-
cd ./dynamic-datasource/
-
-./mvnw -PgenerateMetadata -DskipNativeTests -e clean test
-
-mkdir -p "./dynamic-datasource-spring-boot3-starter/src/test/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/"
-
-native-image-configure generate-conditional\
- --user-code-filter="./native-image/user-code-filter.json"\
- --class-name-filter="./native-image/extra-filter.json"\
- --input-dir="./dynamic-datasource-spring-boot3-starter/target/native/agent-output/test/session-45270-20230907T013541Z/"\
- --output-dir="./dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/"
-
-./mvnw -am -pl dynamic-datasource-spring-boot3-starter -PnativeTestInSpringBoot -T1C -B -e clean test
+./mvnw -PgenerateMetadata -DskipNativeTests -e -T1C clean test native:metadata-copy
+./mvnw -PnativeTestInSpringBoot -T1C -e clean test
```
请手动删除无任何具体条目的 JSON 文件。
diff --git a/dynamic-datasource-spring-boot3-starter/pom.xml b/dynamic-datasource-spring-boot3-starter/pom.xml
index 80c27e0..65551af 100644
--- a/dynamic-datasource-spring-boot3-starter/pom.xml
+++ b/dynamic-datasource-spring-boot3-starter/pom.xml
@@ -60,4 +60,18 @@
test
-
\ No newline at end of file
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+ ${native-maven-plugin.version}
+
+
+
+
diff --git a/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/jni-config.json b/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/jni-config.json
index 3d0adb8..6ad66f5 100644
--- a/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/jni-config.json
+++ b/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/jni-config.json
@@ -6,10 +6,5 @@
{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
"name":"[Lcom.sun.management.internal.DiagnosticCommandInfo;"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.util.Arrays",
- "methods":[{"name":"asList","parameterTypes":["java.lang.Object[]"] }]
}
]
diff --git a/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/reflect-config.json b/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/reflect-config.json
index 0ab0bb5..13a9112 100644
--- a/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/reflect-config.json
+++ b/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/reflect-config.json
@@ -274,175 +274,5 @@
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy",
"methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"com.ibm.icu.text.Collator"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
- "name":"java.beans.PropertyVetoException"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
- "name":"java.io.Closeable",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Boolean",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Byte",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Character",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
- "name":"java.lang.Cloneable",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Deprecated",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Double",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Float",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Integer",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
- "name":"java.lang.Iterable",
- "methods":[{"name":"forEach","parameterTypes":["java.util.function.Consumer"] }, {"name":"spliterator","parameterTypes":[] }]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Long",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
- "name":"java.lang.Object",
- "queryAllDeclaredMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
- "name":"java.lang.Object",
- "methods":[{"name":"equals","parameterTypes":["java.lang.Object"] }, {"name":"getClass","parameterTypes":[] }, {"name":"hashCode","parameterTypes":[] }, {"name":"notify","parameterTypes":[] }, {"name":"notifyAll","parameterTypes":[] }, {"name":"toString","parameterTypes":[] }, {"name":"wait","parameterTypes":[] }, {"name":"wait","parameterTypes":["long"] }, {"name":"wait","parameterTypes":["long","int"] }]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
- "name":"java.lang.Object",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
- "name":"java.lang.ObjectBeanInfo"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.toolkit.DsConfigUtil"},
- "name":"java.lang.ObjectCustomizer"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Short",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.StackTraceElement",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.String",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.lang.Void",
- "fields":[{"name":"TYPE"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.math.BigDecimal"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.math.BigInteger"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.sql.SQLException",
- "fields":[{"name":"next"}]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.util.Date"
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.util.PropertyPermission",
- "methods":[{"name":"","parameterTypes":["java.lang.String","java.lang.String"] }]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.util.logging.LogManager",
- "methods":[{"name":"getLoggingMXBean","parameterTypes":[] }]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"java.util.logging.LoggingMXBean",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
- "name":"javax.naming.Referenceable",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
- "name":"javax.sql.CommonDataSource",
- "queryAllPublicMethods":true,
- "methods":[{"name":"createShardingKeyBuilder","parameterTypes":[] }]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
- "name":"javax.sql.ConnectionPoolDataSource",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
- "name":"javax.sql.DataSource",
- "queryAllPublicMethods":true
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationAdvisor$AnnotationMethodPoint$AnnotationMethodMatcher"},
- "name":"javax.sql.DataSource",
- "queryAllPublicMethods":true,
- "methods":[{"name":"createConnectionBuilder","parameterTypes":[] }]
-},
-{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "name":"sun.security.provider.SHA2$SHA256",
- "methods":[{"name":"","parameterTypes":[] }]
}
]
diff --git a/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/resource-config.json b/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/resource-config.json
deleted file mode 100644
index 23304c6..0000000
--- a/dynamic-datasource-spring-boot3-starter/src/main/resources/META-INF/native-image/com.baomidou/dynamic-datasource-spring-boot3-starter/resource-config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "resources":{
- "includes":[{
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "pattern":"\\QMETA-INF/services/java.sql.Driver\\E"
- }]},
- "bundles":[]
-}
diff --git a/dynamic-datasource-spring-boot3-starter/src/test/resources/META-INF/native-image/dynamic-datasource-spring-boot3-starter-test-metadata/resource-config.json b/dynamic-datasource-spring-boot3-starter/src/test/resources/META-INF/native-image/dynamic-datasource-spring-boot3-starter-test-metadata/resource-config.json
index c3edc40..79a5354 100644
--- a/dynamic-datasource-spring-boot3-starter/src/test/resources/META-INF/native-image/dynamic-datasource-spring-boot3-starter-test-metadata/resource-config.json
+++ b/dynamic-datasource-spring-boot3-starter/src/test/resources/META-INF/native-image/dynamic-datasource-spring-boot3-starter-test-metadata/resource-config.json
@@ -1,17 +1,29 @@
{
"resources":{
- "includes":[{
+ "includes":[{
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.fixture.v3.NestDataSourceTest"},
"pattern":"\\Qdb/add-remove-datasource.sql\\E"
- }, {
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
- "pattern":"\\QMETA-INF/druid-driver.properties\\E"
- }, {
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
- "pattern":"\\QMETA-INF/druid-filter.properties\\E"
- }, {
- "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
- "pattern":"\\Qorg/h2/util/data.zip\\E"
- }]},
+ }, {
+ "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
+ "pattern":"\\QMETA-INF/druid-driver.properties\\E"
+ }, {
+ "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
+ "pattern":"\\QMETA-INF/druid-filter.properties\\E"
+ }, {
+ "condition":{"typeReachable":"com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator"},
+ "pattern":"\\QMETA-INF/services/com.alibaba.druid.filter.Filter\\E"
+ }, {
+ "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
+ "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
+ }, {
+ "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
+ "pattern":"\\QMETA-INF/services/java.sql.Driver\\E"
+ }, {
+ "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
+ "pattern":"\\Qorg/h2/util/data.zip\\E"
+ }, {
+ "condition":{"typeReachable":"com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider"},
+ "pattern":"jdk.jfr:\\Qjdk/jfr/internal/query/view.ini\\E"
+ }]},
"bundles":[]
}
diff --git a/native-image/extra-filter.json b/native-image/extra-filter.json
index bab6fa6..d4ea3b7 100644
--- a/native-image/extra-filter.json
+++ b/native-image/extra-filter.json
@@ -6,6 +6,14 @@
{"excludeClasses": "com.sun.management.**"},
{"excludeClasses": "sun.management.**"},
{"excludeClasses": "javax.management.**"},
+ {"excludeClasses": "java.**"},
+ {"includeClasses": "java.util.Properties"},
+ {"includeClasses": "java.lang.Thread"},
+ {"excludeClasses": "sun.misc.**"},
+ {"excludeClasses": "sun.security.**"},
+ {"excludeClasses": "com.ibm.icu.text.**"},
+ {"excludeClasses": "javax.naming.**"},
+ {"excludeClasses": "javax.sql.**"},
{"excludeClasses": "org.h2.**"},
{"excludeClasses": "oracle.ucp.**"},
{"excludeClasses": "org.apache.tomcat.jdbc.**"},
diff --git a/pom.xml b/pom.xml
index bcbe4a3..7523818 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,7 +59,7 @@
2.9.0
3.9.1
1.4.2
- 1.18.28
+ 1.18.30
2.2.222
4.0.6
5.10.0
@@ -75,7 +75,7 @@
4.2
3.1.0
1.6.13
- 0.9.26
+ 0.9.27
@@ -345,98 +345,120 @@
generateMetadata
- 17
+ 21
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
-
- com.baomidou.dynamic.datasource.fixture.v1.**
-
-
-
-
- org.graalvm.buildtools
- native-maven-plugin
- ${native-maven-plugin.version}
- true
-
-
- build-native
-
- compile-no-fork
-
- package
-
-
- test-native
-
- test
-
- test
-
-
-
-
- true
- Conditional
-
-
- ${user.dir}/native-image/user-code-filter.json
- ${user.dir}/native-image/extra-filter.json
- true
-
-
-
-
-
-
+
+
+
+ maven-surefire-plugin
+
+
+ com.baomidou.dynamic.datasource.fixture.v3.**
+
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+ ${native-maven-plugin.version}
+ true
+
+
+ build-native
+
+ compile-no-fork
+
+ package
+
+
+ test-native
+
+ test
+
+ test
+
+
+
+
+ true
+ Conditional
+
+
+ ${user.dir}/native-image/user-code-filter.json
+
+ ${user.dir}/native-image/extra-filter.json
+
+ true
+
+
+
+
+ main
+
+ false
+
+ ${project.basedir}/src/main/resources/META-INF/native-image/${project.groupId}/${project.artifactId}/
+
+
+
+
+
+
+
nativeTestInSpringBoot
- 17
+ 21
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
- process-test-aot
-
- process-test-aot
-
-
-
-
-
- org.graalvm.buildtools
- native-maven-plugin
- true
-
- ${project.build.outputDirectory}
-
- true
-
-
-
-
- native-test
-
- test
-
-
-
-
-
+
+
+
+ maven-surefire-plugin
+
+
+ com.baomidou.dynamic.datasource.fixture.v3.**
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ process-test-aot
+
+ process-test-aot
+
+
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+ ${native-maven-plugin.version}
+ true
+
+ ${project.build.outputDirectory}
+
+ true
+
+
+
+
+ test-native
+
+ test
+
+ test
+
+
+
+
+