Spring引导应用程序中的数据库连接失败

时间:2017-11-27 05:47:53

标签: java spring-boot pom.xml

我正在尝试使用内置的Tomcat服务器部署spring boot应用程序。而且,即使应用程序启动,我也会收到以下错误。

Field error in object 'spring.datasource' on field 'type': rejected value [org.apache.tomcat.dbcp.dbcp2.BasicDataSource]; codes [typeMismatch.spring.datasource.type,typeMismatch.type,typeMismatch.java.lang.Class,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spring.datasource.type,type]; arguments []; default message [type]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Class' for property 'type'; nested exception is java.lang.IllegalArgumentException: Cannot find class [org.apache.tomcat.dbcp.dbcp2.BasicDataSource]] - o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext
2017-11-26 22:18:27:489 - INFO  - Correlation-Id =  - AppName =  - Server-IP =  - RequestorApp =  - RequestorIp =  - UserId =  - Total-Time =  - 

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. - o.s.b.a.l.AutoConfigurationReportLoggingInitializer
2017-11-26 22:18:27:492 - ERROR - Correlation-Id =  - AppName =  - Server-IP =  - RequestorApp =  - RequestorIp =  - UserId =  - Total-Time =  - 

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target org.springframework.boot.autoconfigure.jdbc.DataSourceProperties@466317f failed:

    Property: spring.datasource.type
    Value: org.apache.tomcat.dbcp.dbcp2.BasicDataSource
    Reason: Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Class' for property 'type'; nested exception is java.lang.IllegalArgumentException: Cannot find class [org.apache.tomcat.dbcp.dbcp2.BasicDataSource]


Action:

Update your application's configuration
 - o.s.b.d.LoggingFailureAnalysisReporter

以下是我的pom.xml文件

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.cnanational.productservice</groupId>
  <artifactId>product-service</artifactId>
  <version>0.0.1-SNAPSHOT</version>

    <name>product-service</name>
    <description>Product Service</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <timestamp>${maven.build.timestamp}</timestamp>
        <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss z</maven.build.timestamp.format>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.cnanational.servicecommon</groupId>
            <artifactId>service-common</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-dbcp</artifactId>
            <version>8.5.4</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>maven-releases</id>
            <name>CNA National Release Artifacts</name>
            <url>https://nexus.cnanational.net/repository/maven-releases/</url>
        </repository>
        <repository>
            <id>maven-snapshots</id>
            <name>CNA National Snapshot Artifacts</name>
            <url>https://nexus.cnanational.net/repository/maven-snapshots/</url>
        </repository>
        <repository>
            <id>maven-central</id>
            <name>CNA National Central</name>
            <url>https://nexus.cnanational.net/repository/maven-central/</url>
        </repository>
    </repositories>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <packagingExcludes>
                        **/product-service/
                    </packagingExcludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

以下是spring-boot yml文件。

security:
  user:
    name: qcSa
    password: qcPassword

server:
  port: 8100
  context-path: /product-service

endpoints:
  jmx:
    domain: com.cnanational.productservice

management:
  context-path: /${common.application-version}/actuator

spring:
  application:
    name: product-service
  datasource:
    # jndi-name: jdbc/web_base_user
    url: jdbc:oracle:thin:@devrac-scan.cnanational.net:1521/d02wpa.cnanational.net
    username: web_base_user
    password: ubew6130
    type: org.apache.tomcat.dbcp.dbcp2.BasicDataSource

product-service:
  paths:
    product-attributes: '/dealerProductAttributes'
    product-surcharges: '/surcharges'
    product-products: '/products'
  deductible-descriptions:
    S: Standard
    D: Disappearing
  sales-ws:
    validation-rules-endpoint:
      endpoint: https://dev03tc.cnanational.com/sales-ws/v1/uiGlobalSettings/search?appName=SalesRatingTool
      user: SVC_DEV_CORS
      password: 113501*3Q3E105^9^z7b
  sql-properties:
    product-procedure-no-rates-error-code: 20000
    controlobj-sql: >
      begin begin dbms_session.set_role(controlobj.getdisableddbroles);
      exception when others then null;
      end;
      controlobj.web_set_user('%s', 'N','%s');
      end;
    controlobj-clear-errors-sql: >
      call errorobj.clearerrormessage()
    controlobj-query-errors-sql: >
      select error_message from error_messagev1
    agent-sales-rating-id-seq-sql:
      select agent_sales_rating_id_seq.nextval from dual
    rate-insertion-sql: >
      insert into agent_sales_rating_parms
        (agent_sales_rating_id, parm_name, parm_value1, parm_value2, parm_value3)
      values
        (:agent_sales_rating_id, :parm_name, :parm_value1, :parm_value2, :parm_value3)
    rate-procedure-name: ins_agent_sales_rating_outputs
    rate-params-query-sql: >
      select
        agent_sales_rating_id,
        parm_name,
        parm_value1,
        parm_value2,
        parm_value3
      from
        agent_sales_rating_parms
      where
        agent_sales_rating_id = :agent_sales_rating_id
        and parm_name in (:param_names)
    rate-query-sql: >
      select 
        listagg(model_description,',') WITHIN GROUP ( order by model_description) as model
        ,vehicle_class
        ,term_months
        ,term_miles 
        , series_deductibles_id 
        , deduct_option
        , deduct_amt 
        , retail_price
        , dealer_cost
      from
        agent_sales_rating_outputs 
      where
        agent_sales_rating_id = :agent_sales_rating_id
      group by 
        vehicle_class
        , term_months
        , term_miles 
        , series_deductibles_id 
        , deduct_option
        , deduct_amt 
        , retail_price
        , dealer_cost
      order by
        vehicle_class desc 
        , series_deductibles_id 
        , deduct_option
        , deduct_amt 
        , term_months
        , term_miles

common:
  application-version: v1
  message-automation:
    app-name: product-service
    heavyweight: false
    fallback-message: 'A system error has occurred'
    message-ids:
      common-exception-handler: 600000
      common-error-controller: 600003
      required-headers-filter: 600012
      too-many-sort-arguments: 600011
      invalid-sort-field: 600010
  rest:
    paths:
      build-info: /buildInfo
    remote-user-header-required-urls:
      - /v1/**
    headers:
      remote-user: oam_remote_user
      correlation-id: Correlation-Id
      requestor-app: REQUESTOR_APP
  health:
    dependencies:
      -
        name: 'Oracle Datasource'
        dependency-type: DB

下面是context.xml文件,其中包含bean信息。下面的Java类具有应用程序属性。

<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id="timeElapsedAspect" class="com.cnanational.servicecommon.aop.TimeElapsedAspect"></bean> <aop:config> <aop:aspect id="timeElapsedAspect" ref="timeElapsedAspect"> <aop:pointcut id="controllerPointcut" expression="execution(public * com.cnanational.productsservice.controller.*.*(..))"/> <aop:around method="logTimeElapsed" pointcut-ref="controllerPointcut"/> </aop:aspect> </aop:config> </beans>

package com.cnanational.productservice;

import java.util.Properties;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.Profile;
import org.springframework.context.support.ResourceBundleMessageSource;
import com.cnanational.productservice.config.ProductProperties;
import com.cnanational.servicecommon.config.CommonConfiguration;

@SpringBootApplication
@EnableConfigurationProperties({ ProductProperties.class })
@Import({ CommonConfiguration.class })
@ImportResource({ "classpath:/product-service/context.xml" })
public class ProductServiceApplication
{
    public static final String PROFILE_TEST = "test";

    public static void main(String[] args) 
    {
        new SpringApplicationBuilder(ProductServiceApplication.class)
            .sources(ProductServiceApplication.class)
            .properties(properties())
            .run(args);
    }

    public static Properties properties()
    {
        Properties props = new Properties();

        props.put("spring.config.location", "classpath:product-service/");

        props.put("spring.config.name", "product-service");

        props.put("logging.config", "classpath:product-service/logback.xml");

        return props;
    }

    @Bean
    public MessageSource messageSource()
    {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();

        messageSource.setBasename("product-service/ValidationMessages");
        messageSource.setUseCodeAsDefaultMessage(false);

        return messageSource;
    }

    /**
     * JUnit test configuration only to be applied when test profile
     * is active.  This is required for inherited tests to work without
     * having to add the EnableAutoConfiguration tag to every concrete
     * test class.
     */
    @Profile(PROFILE_TEST)
    @Configuration
    @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
    public static class TestConfiguration
    {
        private final Logger log = LoggerFactory.getLogger(getClass());

        /**
         * Let us know that the test configuration is loaded. 
         */
        @PostConstruct
        public void postConstruct()
        {
            log.info("TestConfiguration loaded");
        }
    }
}

0 个答案:

没有答案
相关问题