相关疑难解决方法(0)

Spring Boot jdbc数据源自动配置在独立的tomcat上失败

在尝试在独立的tomcat(7)实例上部署和启动Spring启动应用程序时,我们遇到了一个问题,即找不到自动配置的spring数据源bean并抛出相应的异常:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type [javax.sql.DataSource] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this dependency. 
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}    at
     org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1060)  at 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:920)   at 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:815)     at 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)   ... 84 more
Run Code Online (Sandbox Code Playgroud)

简单的jdbc spring.datasource在application.properties中正确配置,并且应用程序本身与嵌入式tomcat实例完美地运行,作为独立的spring引导应用程序.

看起来好像无法正确读取和/或处理application.properties文件,或者在数据源自动配置完成之前触发了一些其他bean(例如REST控制器中的服务)的注入.

不使用嵌入式tomcat时是否需要任何额外配置?或者有没有人遇到过类似的问题?

简单的应用和配置:

@EnableAutoConfiguration
@Configuration
@ComponentScan("com.foo")
public class Application extends SpringBootServletInitializer {

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

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

}
Run Code Online (Sandbox Code Playgroud)

application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)

数据源使用示例:

@Repository …
Run Code Online (Sandbox Code Playgroud)

java spring datasource jdbc spring-boot

10
推荐指数
3
解决办法
4万
查看次数

Spring Boot/Spring数据import.sql不运行Spring-Boot-1.0.0.RC1

我一直在关注Spring Boot的开发,有时在初始版本0.0.5-BUILD-SNAPSHOT和我正在使用的当前版本之间,1.0.0.RC1我不再运行我的import.sql脚本了.

这是我的配置LocalContainerEntityManagerJpaVendorAdapter

@Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(dataSource);
        lef.setJpaVendorAdapter(jpaVendorAdapter);
        lef.setPackagesToScan("foo.*");
        return lef;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(true);
        hibernateJpaVendorAdapter.setGenerateDdl(true);
        hibernateJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
        return hibernateJpaVendorAdapter;
    }
Run Code Online (Sandbox Code Playgroud)

有趣的hibernate.hbm2ddl.auto似乎还在运行,我认为这是我的定义的一部分SpringBootServletInitializer

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {
Run Code Online (Sandbox Code Playgroud)

但是,我还注意到生成的表格不再有下划线并在生成时改变了它们的形状?

但是,这可能是更新我的org.postgresql版本的结果:

先前:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.2-1004-jdbc41</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

现在:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.3-1100-jdbc41</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我也不得不改变 …

spring spring-data spring-boot

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

spring ×2

spring-boot ×2

datasource ×1

java ×1

jdbc ×1

spring-data ×1