问题描述
我有一个Spring Boot
Java
应用程序,它使用MyBatis
Mappers
,该应用程序通过将DB2
与{{1 }}。
在interfaces
中作为XML
应用程序运行时,此设置可以正常工作。但是,当我使用Spring Boot
将应用程序构建为Eclipse IDE
文件并将其部署在外部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
扫描为MyBatis
。我必须更改一些配置,但是我不知道要做什么。
===================
当前配置(在mappers
上以mappers
应用程序运行时有效)。
(1)com.myapplicaton.dao中的所有Eclipse IDE
Spring Boot
映射器都带有MyBatis
批注:
java
(2)在应用程序启动中添加了@Mapper
。
package com.myapplicaton.dao;
@Mapper
public interface MybatisMapper {
List<Thing> selectByExample(ThingExample example);
//...
}
(3)在MapperScan
类中使用@SpringBootApplication
@MapperScan({"com.myapplicaton.dao","com.myapplicaton.other.mappers"})
public class MyApplication extends SpringBootServletInitializer
{
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
映射器:
MyBatis
@Autowired
@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();
}
}
===================
问题
为什么将其部署为package com.myapplicaton.other.mappers;
public class SpringMapper {
@Autowired
ThingTypes thingTypes;
//...
}
时不起作用?
答案 0 :(得分:0)
好了,整天忙碌了之后,我有一个答案。
首先,我必须删除在使用@PostConstruct
{{1}的init()
方法上使用@Autowired
的两个“问题” bean }映射器。我不知道为什么它不喜欢这样,但是我不在乎,因为在删除它们之后,该应用程序通常以Mybatis
的身份正常启动。
它曾经做过这样的事情:
WAR
第二个问题,我遇到的问题是,当应用程序部署为package com.myapplicaton.beans;
public class ThingTypes {
@Autowired
MybatisMapper mybatisMapper;
@PostConstruct
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
private void init() {
mybatisMapper.selectByExample(example);
}
}
时,应用程序无法在我的MyBatis
包中找到mapper
.xml
dao
个文件WAR
。像往常一样在Eclipse上运行时很好。
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.myapplicaton.dao.MybatisMapper.selectByExample
我检查了WAR
文件,瞧瞧,.xml
已跳过Maven
文件,只有Java
class
个文件存在该文件夹。我无法弄清楚如何使用.xml
来跳过spring-boot-maven-plugin
个文件,而且我也不想尝试找出另一个插件,因此可以按以下方式击败系统:
我在应用程序的src/main/resources/
文件夹中创建了一组文件夹,其文件夹结构与.java
interface
mappers
所在的文件夹结构完全相同。因此,我创建了src/main/resources/com/myapplication/dao
。我将所有.xml
文件放在其中。
检查新的WAR后,将.xml
文件与java
class
文件放置在同一目录中,并且MyBatis
正常工作。
Hurrah。