错误:中的字段dataSource需要一个类型为“javax.activation.dataSource”的bean,但找不到该bean

错误:中的字段dataSource需要一个类型为“javax.activation.dataSource”的bean,但找不到该bean,java,spring-boot,jdbc,spring-jdbc,Java,Spring Boot,Jdbc,Spring Jdbc,我对SPringBoot中的数据源有问题。我想使用JDBC并从数据源获取数据,但我得到错误: 说明: com.example.My.MyApplication中的字段dataSource需要找不到类型为“javax.activation.dataSource”的bean 行动: 考虑在配置中定义“javax.activation.DataSource”类型的bean 它是关于MyApplication.java中的数据源的 package com.example.My; import com.

我对SPringBoot中的数据源有问题。我想使用JDBC并从数据源获取数据,但我得到错误: 说明:

com.example.My.MyApplication中的字段dataSource需要找不到类型为“javax.activation.dataSource”的bean

行动:

考虑在配置中定义“javax.activation.DataSource”类型的bean

它是关于MyApplication.java中的数据源的

package com.example.My;

import com.example.My.dao.CustomerRepository;
import com.example.My.model.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.activation.DataSource;
import java.util.List;

import static java.lang.System.exit;

@SpringBootApplication

public class MyApplication implements CommandLineRunner {

/**
 *
 */
    @Autowired
    DataSource dataSource;

    @Autowired
    CustomerRepository customerRepository;


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


    @Override
    public void run(String... args) throws Exception {

        System.out.println("DATASOURCE = " + dataSource);

        /// Get dbcp2 datasource settings
        // BasicDataSource newds = (BasicDataSource) dataSource;
        // System.out.println("BasicDataSource = " + newds.getInitialSize());

        System.out.println("Display all customers...");
        List<Customer> list = customerRepository.findAll();
        list.forEach(x -> System.out.println(x));

        System.out.println("Done!");

        exit(0);
    }

}
下面是代码

my schema.sql:

CREATE TABLE CUSTOMER(
ID NUMBER(10) NOT NULL,
NAME VARCHAR2(100) NOT NULL,
EMAIL VARCHAR2(100) NOT NULL,
CREATED_DATE DATE NOT NULL,
CONSTRAINT CUSTOMER_PK PRIMARY KEY (ID)
);
和data.sql

INSERT INTO "CUSTOMER" (ID, NAME, EMAIL, CREATED_DATE) VALUES(1, 
'mkyong','111@yahoo.com', TO_DATE('2017-02-11', 'yyyy-mm-dd'));
INSERT INTO "CUSTOMER" (ID, NAME, EMAIL, CREATED_DATE) VALUES(2, 
'yflow','222@yahoo.com', TO_DATE('2017-02-12', 'yyyy-mm-dd'));
INSERT INTO "CUSTOMER" (ID, NAME, EMAIL, CREATED_DATE) VALUES(3, 
'zilap','333@yahoo.com', TO_DATE('2017-02-13', 'yyyy-mm-dd'));
还有我的Customer.java 包com.example.My.model

import java.sql.Date;

public class Customer {

    int id;
    String name;
    String email;
    Date date;

    public Customer(int id, String name, String email, Date date) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.date = date;
    }
}
CustomerRepository.java

import com.example.My.model.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository

public class CustomerRepository {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    // thanks Java 8, look the custom RowMapper
    public List<Customer> findAll() {

        List<Customer> result = jdbcTemplate.query(
                "SELECT id, name, email, created_date FROM customer",
                (rs, rowNum) -> new Customer(rs.getInt("id"),
                        rs.getString("name"), rs.getString("email"), 
rs.getDate("created_date"))
        );

        return result;

    }
}
MyApplication.java

package com.example.My;

import com.example.My.dao.CustomerRepository;
import com.example.My.model.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.activation.DataSource;
import java.util.List;

import static java.lang.System.exit;

@SpringBootApplication

public class MyApplication implements CommandLineRunner {

/**
 *
 */
    @Autowired
    DataSource dataSource;

    @Autowired
    CustomerRepository customerRepository;


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


    @Override
    public void run(String... args) throws Exception {

        System.out.println("DATASOURCE = " + dataSource);

        /// Get dbcp2 datasource settings
        // BasicDataSource newds = (BasicDataSource) dataSource;
        // System.out.println("BasicDataSource = " + newds.getInitialSize());

        System.out.println("Display all customers...");
        List<Customer> list = customerRepository.findAll();
        list.forEach(x -> System.out.println(x));

        System.out.println("Done!");

        exit(0);
    }

}

您在MyApplication中导入了错误的数据源类型。您需要导入javax.sql.DataSource,而不是javax.activation.DataSource。

谢谢,但是当我在javax.sql.DataSource上进行更改时,我得到的comunicat无法自动连接。有多个数据源类型的bean。我发现我应该在DataSource DataSource之前添加@QualifierdataSource;但是,我在创建名为“myApplication”的bean时出错:通过字段“dataSource”表示未满足的依赖关系;嵌套的异常是org.springframework。beans@Monika我建议您问一个新问题,但听起来您要么没有提供数据源配置,要么缺少实际激活数据源创建的依赖项。