从2.0.6更新的Spring Boot 2.1.3导致util:map的BeanDefinitionParsingException

sku*_*mar 10 spring spring-boot

我有以下的应用程序上下文XML映射bean定义和使用控制器的地图,这是造成BeanDefinitionParsingException春季启动2.1.3升级。在2.0.6版本中可以正常工作。

有谁知道如何解决这个问题?

spring.main.allow-bean-definition-overriding=true在应用程序属性中定义“ ”不能解决问题。

@SpringBootApplication
@PropertySource("classpath:app.properties")
public class Application extends SpringBootServletInitializer {


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {// NOSONAR
        SpringApplication.run(Application.class, args);
    }

}

@Configuration
public class ApplicationConfig {

    @Configuration
    @ImportResource("classpath*:applicationContext.xml")    
    public static class XmlImportingConfiguration {
    }

}

app.properties
#Spring Boot
server.contextPath=/myapp
server.servlet.context-path=/myapp
spring.application.name=myapp
server.tomcat.max-threads=200
server.port=901
server.error.whitelabel.enabled=false

logging.level.org.springframework.web: INFO
logging.level.org.springframework: INFO
logging.level.com.wellsfargo: INFO
server.tomcat.accessLogEnabled=false
logging.config=config/log4j2.xml

spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix: .jsp

applicationContext.xml 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

        <util:map id="lookup">
            <entry key="60" value="1 hour"></entry>
            <entry key="480" value="8 hours"></entry>
            <entry key="1440" value="24 hours"></entry>
            <entry key="2880" value="2 days"></entry>
        </util:map>
</beans>

@Controller
@RequestMapping("/")
public class MyController{
    @Resource(name="lookup")
    private Map<String,String> lookup;

}
Run Code Online (Sandbox Code Playgroud)

错误:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:无效的bean定义,名称为'lookup',定义为null:无法注册bean定义[Generic bean:类[org.springframework.beans.factory.config.MapFactoryBean];scope =; abstract = false; lazyInit = false; autowireMode = 0; dependencyCheck = 0; autowireCandidate = true; primary = false; factoryBeanName = null; factoryMethodName = null; initMethodName = null; bean'lookup'的destroyMethodName = null]:已经有[Generic bean:类[org.springframework.beans.factory.config.MapFactoryBean];scope =; abstract = false; lazyInit = false; autowireMode = 0; dependencyCheck = 0; autowireCandidate = true; primary = false; factoryBeanName = null; factoryMethodName = null; initMethodName = null; destroyMethodName = null]绑定。

sku*_*mar 6

我有解决此问题的方法。基本上将地图从applicationContext.xml移动到应用程序属性,并使用@Value进行检索,如下所示。

app.properties
lookup={'60':'Last 1 hour','480':'Last 8 hours','1440':'Last 24 hours','2880':'Last 2 days'}

ApplicationProperties.java
    @Value("#{${lookup}}")
    private Map<String,String> lookupTimeinterval;
Run Code Online (Sandbox Code Playgroud)