Skip to content
This repository has been archived by the owner on Feb 23, 2023. It is now read-only.

Add MyBatis support #404

Closed
geekrusice opened this issue Dec 12, 2020 · 10 comments
Closed

Add MyBatis support #404

geekrusice opened this issue Dec 12, 2020 · 10 comments
Labels
for: external-project For an external project and not something we can fix jvm-reachability-metadata Should be supported via the GraalVM JVM Reachability Metadata Repository once available type: compatibility Native image compatibility issue

Comments

@geekrusice
Copy link

I used Springboot+MybatisPlus in the project When I did not add MybatisPlus, I could successfully build a native image and run it successfully.
Join MybatisPlus, although it can be compiled and generated native image, but the running error. Error memory is as follows:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-12-12 08:23:32.757 ERROR 4751 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.fandow.oa.OaStaffApplication#MapperScannerRegistrar#0': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.mybatis.spring.mapper.MapperScannerConfigurer]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.mybatis.spring.mapper.MapperScannerConfigurer.<init>()
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1318) ~[na:na]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1216) ~[na:na]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571) ~[na:na]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[na:na]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[na:na]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[na:na]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[na:na]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[na:na]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:122) ~[na:na]
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:751) ~[na:na]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:569) ~[na:na]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[na:na]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[na:na]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[na:na]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[na:na]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[na:na]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[na:na]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[na:na]
	at com.fandow.oa.OaStaffApplication.main(OaStaffApplication.java:22) ~[com.fandow.oa.oastaffapplication:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.mybatis.spring.mapper.MapperScannerConfigurer]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.mybatis.spring.mapper.MapperScannerConfigurer.<init>()
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:83) ~[na:na]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1310) ~[na:na]
	... 18 common frames omitted
Caused by: java.lang.NoSuchMethodException: org.mybatis.spring.mapper.MapperScannerConfigurer.<init>()
	at java.lang.Class.getConstructor0(DynamicHub.java:3349) ~[na:na]
	at java.lang.Class.getDeclaredConstructor(DynamicHub.java:2553) ~[na:na]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:78) ~[na:na]
	... 19 common frames omitted

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.fandow</groupId>
    <artifactId>oa-staff</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>oa-staff</name>

    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.4.0</spring-boot.version>
        <oa-common.version>2.0.0-SNAPSHOT</oa-common.version>
        <tomcat-embed-programmatic-version>9.0.38.1-dev</tomcat-embed-programmatic-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tomcat.embed</groupId>
                    <artifactId>tomcat-embed-websocket</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.experimental</groupId>
            <artifactId>tomcat-embed-programmatic</artifactId>
            <version>${tomcat-embed-programmatic-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.experimental</groupId>
            <artifactId>spring-graalvm-native</artifactId>
            <version>0.8.3</version>
        </dependency>

        <dependency>
            <groupId>com.fandow.framework</groupId>
            <artifactId>oa-common-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-indexer</artifactId>
            </dependency>

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.1</version>
            </dependency>

            <dependency>
                <groupId>com.fandow.framework</groupId>
                <artifactId>oa-common-web</artifactId>
                <version>${oa-common.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <profiles>
        <profile>
            <id>native</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.graalvm.nativeimage</groupId>
                        <artifactId>native-image-maven-plugin</artifactId>
                        <version>20.3.0</version>
                        <configuration>
                            <mainClass>com.fandow.oa.OaStaffApplication</mainClass>
                            <buildArgs>
                                -Dspring.graal.skip-logback=true
                                -Dspring.graal.verbose=true
                                -Dspring.native.remove-yaml-support=true
                                -Dspring.spel.ignore=true
                                --trace-class-initialization=org.springframework.util.unit.DataSize
                                --report-unsupported-elements-at-runtime
                                --enable-https
                                -H:+ReportUnsupportedElementsAtRuntime
                                -H:+AddAllCharsets
                                --allow-incomplete-classpath
                                --report-unsupported-elements-at-runtime -H:+ReportExceptionStackTraces
                                --no-server
                                -H:IncludeResourceBundles=javax.servlet.http.LocalStrings
                                -H:IncludeResourceBundles=javax.servlet.LocalStrings
                                --initialize-at-run-time=io.netty.channel.unix.Socket
                                --initialize-at-run-time=io.netty.channel.unix.IovArray
                                --initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop
                                --initialize-at-run-time=io.netty.channel.unix.Errors
                                --initialize-at-build-time=org.springframework.util.unit.DataSize
                            </buildArgs>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>native-image</goal>
                                </goals>
                                <phase>package</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.0</version>
                <configuration>
                    <mainClass>com.fandow.oa.OaStaffApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

</project>

Bootstrap Application

package com.fandow.oa;

import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;

/**
 * @version 1.0.0
 * @since 2020-12-12
 */
@SpringBootApplication
@Configuration(proxyBeanMethods=false)
@MapperScan("com.fandow.oa.infrastructure.mapper")
public class OaStaffApplication {

    public static void main(String[] args) {
        SpringApplication.run(OaStaffApplication.class, args);
    }

}

Error screenshot

Snipaste_2020-12-12_21-32-53

What happened?
Plz help me, thx.

@geekrusice geekrusice changed the title Use mybatisPlus. Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException Used mybatisPlus. Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException Dec 12, 2020
@sdeleuze sdeleuze changed the title Used mybatisPlus. Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException Add MyBatis support Dec 15, 2020
@sdeleuze sdeleuze added the status: waiting-for-triage An issue we've not yet triaged or decided on label Dec 15, 2020
@yiyingcanfeng
Copy link

<dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.4</version>
</dependency>

mybatis-spring-boot-starter not work too.

@cuihj
Copy link

cuihj commented Mar 24, 2021

I ran into the same problem

<dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.4</version>
</dependency>

mybatis-spring-boot-starter not work too.

I ran into the same problem

@sdeleuze sdeleuze removed the status: waiting-for-triage An issue we've not yet triaged or decided on label Mar 29, 2021
@sdeleuze sdeleuze added this to the Backlog milestone Mar 29, 2021
@sdeleuze sdeleuze added the type: compatibility Native image compatibility issue label Mar 29, 2021
@sk142857
Copy link

sk142857 commented Nov 2, 2021

2021-11-02 14:56:27.857  INFO 1 --- [           main] o.s.nativex.NativeListener               : This application is bootstrapped with code generated with Spring AOT,
2021-11-02 14:56:27.867  INFO 1 --- [           main] o.s.nativex.NativeListener               : This application is bootstrapped with code generated with Spring AOT,
,
  .   ____          _            __ _ _,
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \,
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \,
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) ),
  '  |____| .__|_| |_|_| |_\__, | / / / /,
 =========|_|==============|___/=/_/_/_/,
 :: Spring Boot ::                (v2.5.6),
,
2021-11-02 14:56:27.868  INFO 1 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default,
2021-11-02 14:56:27.922 ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed,
,
java.lang.ExceptionInInitializerError: null,
	at org.mybatis.spring.mapper.MapperScannerConfigurer.postProcessBeanDefinitionRegistry(MapperScannerConfigurer.java:357) ~[com.example.demo.DemoApplication:2.0.6],
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) ~[na:na],
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:142) ~[na:na],
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[na:na],
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[na:na],
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[na:na],
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[com.example.demo.DemoApplication:2.5.6],
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[com.example.demo.DemoApplication:2.5.6],
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[com.example.demo.DemoApplication:2.5.6],
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[com.example.demo.DemoApplication:2.5.6],
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[com.example.demo.DemoApplication:2.5.6],
	at com.example.demo.DemoApplication.main(DemoApplication.java:11) ~[com.example.demo.DemoApplication:na],
Caused by: org.apache.ibatis.logging.LogException: Error creating logger for logger org.mybatis.spring.mapper.ClassPathMapperScanner.  Cause: java.lang.NullPointerException,
	at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:54) ~[na:na],
	at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:47) ~[na:na],
	at org.mybatis.logging.LoggerFactory.getLogger(LoggerFactory.java:32) ~[na:na],
	at org.mybatis.spring.mapper.ClassPathMapperScanner.<clinit>(ClassPathMapperScanner.java:58) ~[na:na],
	... 12 common frames omitted,
Caused by: java.lang.NullPointerException: null,
	at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:52) ~[na:na],
	... 15 common frames omitted,

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.27</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.3.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.22</version>
			<scope>provided</scope>
		</dependency>

the same problem

@sdeleuze
Copy link
Contributor

With recent fixes related to MyBatis with Spring Native 0.11, should we claim MyBatis support? If so, I would appreciate a PR with a dedicated sample.

@linghengqian
Copy link

With recent fixes related to MyBatis with Spring Native 0.11, should we claim MyBatis support? If so, I would appreciate a PR with a dedicated sample.

@making
Copy link
Contributor

making commented Jan 12, 2022

@kazuki43zoo FYI

@kazuki43zoo
Copy link
Contributor

kazuki43zoo commented Jan 12, 2022

@linghengqian @making Thanks for mention !!

@sdeleuze , @snicoll, and other contributors

I'll try to integrate with spring-native for MyBaits's modules. Many problems have been solved, but I am encountering one problem that cannot be solved yet. I would be grateful if tell me a hint for resolving this issue when you have time.

Once this issue is resolved, I would suggest publishing it as an official module to MyBatis owners.

@kazuki43zoo
Copy link
Contributor

kazuki43zoo commented Jan 31, 2022

Hi guys, The MyBatis team has been published the integration module for spring-native feature to Sonatype OSS repository. Please try it and welcome to feedback!!

@sdeleuze
Copy link
Contributor

sdeleuze commented Feb 1, 2022

Nice thanks for working on this.

@sdeleuze sdeleuze added the jvm-reachability-metadata Should be supported via the GraalVM JVM Reachability Metadata Repository once available label Mar 17, 2022
@sdeleuze
Copy link
Contributor

sdeleuze commented Jan 2, 2023

Spring Native is now superseded by Spring Boot 3 official native support, see the related reference documentation for more details.

As a consequence, I am closing this issue, and recommend trying your use case with latest Spring Boot 3 version. If you still experience the issue reported here, please open an issue directly on the GraalVM Reachability Repository project.

Thanks for your contribution on the experimental Spring Native project, we hope you will enjoy the official native support introduced by Spring Boot 3.

@sdeleuze sdeleuze closed this as not planned Won't fix, can't repro, duplicate, stale Jan 2, 2023
@sdeleuze sdeleuze removed this from the Backlog milestone Jan 2, 2023
@sdeleuze sdeleuze added the for: external-project For an external project and not something we can fix label Jan 2, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
for: external-project For an external project and not something we can fix jvm-reachability-metadata Should be supported via the GraalVM JVM Reachability Metadata Repository once available type: compatibility Native image compatibility issue
Development

No branches or pull requests

8 participants