Skip to content

Commit e1b9ab9

Browse files
🐛 Native Support mybatis.config-location
mybatis/spring-boot-starter#994
1 parent 755114b commit e1b9ab9

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

.github/workflows/native.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ jobs:
7474
# run: xcode-select --install
7575

7676
- name: Test with Spring Boot Native Latest
77-
run: ./mvnw -V compile -Pnative native:compile -am -pl mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation,mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-xml
77+
run: ./mvnw -V clean compile -Pnative native:compile -am -pl mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation,mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-xml
7878

7979
- name: Run Native Latest
8080
run: |

mybatis-spring-boot-autoconfigure/src/main/java/org/mybatis/spring/boot/autoconfigure/MyBatisBeanFactoryInitializationAotProcessor.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.apache.ibatis.reflection.TypeParameterResolver;
2828
import org.mybatis.spring.mapper.MapperFactoryBean;
2929
import org.mybatis.spring.mapper.MapperScannerConfigurer;
30+
import org.slf4j.Logger;
31+
import org.slf4j.LoggerFactory;
3032
import org.springframework.aot.hint.MemberCategory;
3133
import org.springframework.aot.hint.RuntimeHints;
3234
import org.springframework.beans.PropertyValue;
@@ -36,14 +38,26 @@
3638
import org.springframework.beans.factory.config.BeanDefinition;
3739
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
3840
import org.springframework.beans.factory.support.RegisteredBean;
41+
import org.springframework.core.env.Environment;
42+
import org.springframework.core.io.Resource;
43+
import org.springframework.core.io.ResourceLoader;
44+
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
3945
import org.springframework.util.ReflectionUtils;
46+
import org.springframework.util.ResourceUtils;
47+
import org.springframework.util.StringUtils;
4048

4149
/**
4250
* @since 3.0.4
4351
*/
4452
class MyBatisBeanFactoryInitializationAotProcessor
4553
implements BeanFactoryInitializationAotProcessor, BeanRegistrationExcludeFilter {
4654

55+
private static final Logger logger = LoggerFactory.getLogger(MyBatisBeanFactoryInitializationAotProcessor.class);
56+
57+
private static final ResourceLoader RESOURCE_RESOLVER = new PathMatchingResourcePatternResolver();
58+
59+
private static final String CONFIG_LOCATION = MybatisProperties.MYBATIS_PREFIX + ".config-location";
60+
4761
private static final Set<Class<?>> EXCLUDE_CLASSES = new HashSet<>();
4862

4963
static {
@@ -58,6 +72,10 @@ public BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableL
5872
}
5973
return (context, code) -> {
6074
RuntimeHints hints = context.getRuntimeHints();
75+
76+
Environment environment = beanFactory.getBean(Environment.class);
77+
configLocation(environment, hints);
78+
6179
for (String beanName : beanNames) {
6280
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName.substring(1));
6381
PropertyValue mapperInterface = beanDefinition.getPropertyValues().getPropertyValue("mapperInterface");
@@ -78,6 +96,19 @@ public boolean isExcludedFromAotProcessing(RegisteredBean registeredBean) {
7896
return EXCLUDE_CLASSES.contains(registeredBean.getBeanClass());
7997
}
8098

99+
private void configLocation(Environment environment, RuntimeHints hints) {
100+
String configLocation = environment.getProperty(CONFIG_LOCATION);
101+
if (StringUtils.hasText(configLocation)) {
102+
Resource resource = RESOURCE_RESOLVER.getResource(configLocation);
103+
if (resource.exists()) {
104+
Stream.of(configLocation.replace(ResourceUtils.CLASSPATH_URL_PREFIX, ""))
105+
.forEach(hints.resources()::registerPattern);
106+
} else {
107+
logger.error("{}: {} does not exist", CONFIG_LOCATION, configLocation);
108+
}
109+
}
110+
}
111+
81112
private void registerMapperRelationships(Class<?> mapperInterfaceType, RuntimeHints hints) {
82113
Method[] methods = ReflectionUtils.getAllDeclaredMethods(mapperInterfaceType);
83114
for (Method method : methods) {

mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-xml/src/main/resources/META-INF/native-image/resource-config.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
{
22
"resources": {
33
"includes": [
4-
{ "pattern": "mybatis-config.xml" },
54
{ "pattern": "sample/mybatis/graalvm/xml/mapper/CityMapper.xml" },
65
{ "pattern": "sample/mybatis/graalvm/xml/mapper/HotelMapper.xml" }
76
]

0 commit comments

Comments
 (0)