Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand All @@ -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
Expand All @@ -44,15 +44,15 @@ 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 }}
timeout-minutes: 60
strategy:
matrix:
os: [ ubuntu-latest ]
java-version: [ '17', '20' ]
java-version: [ '17', '21-ea' ]
steps:
- uses: actions/checkout@v3
- name: Setup java
Expand Down
23 changes: 5 additions & 18 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 [email protected]: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)。
Expand All @@ -69,29 +69,16 @@ 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/` 文件夹下。`${}` 内为
POM 4.0 的常规系统变量,自行替换。

```bash
git clone [email protected]: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 文件。
Expand Down
16 changes: 15 additions & 1 deletion dynamic-datasource-spring-boot3-starter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,18 @@
<scope>test</scope>
</dependency>
</dependencies>
</project>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>${native-maven-plugin.version}</version>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -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[]"] }]
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -274,175 +274,5 @@
"condition":{"typeReachable":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource"},
"name":"com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy",
"methods":[{"name":"<init>","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":"<init>","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":"<init>","parameterTypes":[] }]
}
]

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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":[]
}
8 changes: 8 additions & 0 deletions native-image/extra-filter.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.**"},
Expand Down
Loading