Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring Boot MyBatis@Mappers不再具有战争功能_Spring Boot_War_Mybatis - Fatal编程技术网

Spring boot Spring Boot MyBatis@Mappers不再具有战争功能

Spring boot Spring Boot MyBatis@Mappers不再具有战争功能,spring-boot,war,mybatis,Spring Boot,War,Mybatis,问题描述 我有一个springbootJava应用程序,它使用MyBatisMappers,通过使用接口和XML与进行通信 当作为eclipseide中的Spring Boot应用程序运行时,此设置可以正常工作。但是,当我使用Mavan将应用程序构建为WAR文件,并将其部署到外部Tomcat服务器上时,突然收到错误,应用程序部署时找不到我的映射程序: org.springframework.beans.factory.UnsatisfiedDependencyException: Error c

问题描述

我有一个
springboot
Java
应用程序,它使用
MyBatis
Mappers
,通过使用
接口
XML
进行通信

当作为
eclipseide
中的
Spring Boot
应用程序运行时,此设置可以正常工作。但是,当我使用
Mavan
将应用程序构建为
WAR
文件,并将其部署到外部
Tomcat
服务器上时,突然收到错误,应用程序部署时找不到我的映射程序:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springmapper': Unsatisfied dependency expressed through field 'thingTypes'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'otherthingtypes': Invocation of init method failed; nested exception is 

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.myapplicaton.dao.MybatisMapper.selectByExample
我感觉,当作为
WAR
运行时,应用程序不再以
mappers
的身份扫描这些
MyBatis
mappers
。我必须改变一些配置,但我不知道是什么

====================

当前配置(在
EclipseIDE
上作为
SpringBoot
应用程序运行时工作)

(1) com.myapplicaton.dao中的所有
MyBatis
java
Mapper都有
@Mapper
注释:

package com.myapplicaton.dao;

@Mapper
public interface MybatisMapper {
   List<Thing> selectByExample(ThingExample example);
   //... 
}
(3) 在
@Autowired
类中使用
MyBatis
映射器:

@Configuration
public class SomeConfig {

    @Bean(name = "springmapper")
    @Scope(value = "singleton")
    public SpringMapper getSpringMapper() {
        return new SpringMapper();
    }

    @Bean(name = "thingTypes")
    @Scope(value = "singleton")
    public ThingTypes thingTypes() {
        return new ThingTypes();
    }
}
====================

问题


为什么当部署为战争时,这不起作用呢?

好吧,在处理了一整天之后,我有了一个答案

首先,我必须删除两个“问题”bean,它们使用了
@PostConstruct
,使用了
@Autowired
映射器的
init()
方法。我不知道为什么它不喜欢这样,但我不在乎,因为在我删除它们之后,应用程序作为
WAR
正常启动。。大部分

它曾经做过这样的事情:

package com.myapplicaton.beans;

public class ThingTypes {
    @Autowired
    MybatisMapper mybatisMapper;

    @PostConstruct
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
    private void init() {
          mybatisMapper.selectByExample(example);
    }
}
我遇到的第二个问题是,应用程序在部署为
WAR
时,在我的
dao
包中找不到
MyBatis
mapper
.xml
文件。和往常一样,在Eclipse上运行时一切正常

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.myapplicaton.dao.MybatisMapper.selectByExample
我检查了
WAR
文件,发现
.xml
文件被
Maven
跳过了,只有
Java
文件存在于该文件夹中。我不知道如何使用
spring boot maven plugin
取消禁用
.xml
文件,我也不打算尝试另一个插件,因此我能够击败系统,如下所示:

我在应用程序的
src/main/resources/
文件夹中创建了一组文件夹,其文件夹结构与
.java
接口的位置完全相同。因此,我创建了
src/main/resources/com/myapplication/dao
。我把所有的
.xml
文件都放在那里

在检查新WAR时,
.xml
文件与
java
文件放在同一目录中,
MyBatis
工作正常


万岁。

你试过这个吗?让我知道是否有效@MissKitty@Aliy你好我之前看过这篇文章。但是,我根本没有实现EnvironmentAware的MybatisConfiguration。当我尝试它时,EnvironmentAware强制您实现一个名为setEnvironment(环境)的方法,而我完全不知道该环境是/应该是什么。当我尝试使用环境方法不做任何事情时,它似乎不会以任何方式改变任何东西。做得好这可能也会帮助其他人:)谢谢分享
package com.myapplicaton.beans;

public class ThingTypes {
    @Autowired
    MybatisMapper mybatisMapper;

    //...
}
package com.myapplicaton.beans;

public class ThingTypes {
    @Autowired
    MybatisMapper mybatisMapper;

    @PostConstruct
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
    private void init() {
          mybatisMapper.selectByExample(example);
    }
}
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.myapplicaton.dao.MybatisMapper.selectByExample