如何解决无法自动配置数据源:未指定'spring.datasource.url'并且无法自动配置嵌入式数据源

时间:2019-06-05 10:40:09

标签: spring-boot amazon-ec2 spring-data amazon-rds

我正在尝试在EC2中运行SpringBootApplication,我已经在RDS中托管了mysql。当我在本地数据库中尝试时,它运行良好,但是当我转移到Rds时,应用程序给了我错误

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

Description:

Failed to auto-configure a DataSource: 'spring.datasource.url' is not 
specified and no embedded datasource could be auto-configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

我已经用Google搜索并尝试在应用程序中添加一些配置,但是它对我不起作用

我在这里发布应用程序正在提及的课程

AppUserDAO

@Repository
@Transactional
public class AppUserDAO {


@Autowired
private EntityManager entityManager;

public AppUser findUserAccount(String userName) {
    try {
        String sql = "Select e from " + AppUser.class.getName() + " e " //
                + " Where e.userName = :userName ";

        Query query = entityManager.createQuery(sql, AppUser.class);
        query.setParameter("userName", userName);

        return (AppUser) query.getSingleResult();
    } catch (NoResultException e) {
        return null;
    }
   }
  }

AppRoleDAO

@Repository
@Transactional
public class AppRoleDAO {

@Autowired
private EntityManager entityManager;

public List<String> getRoleNames(Long userId) {
    String sql = "Select ur.appRole.roleName from " + UserRole.class.getName() + " ur " //
            + " where ur.appUser.userId = :userId ";

    Query query = this.entityManager.createQuery(sql, String.class);
    query.setParameter("userId", userId);
    return query.getResultList();
    }
 }

UserDetailsS​​erviceImpl

 @Service
 public class UserDetailsServiceImpl implements UserDetailsService {

@Autowired
private AppUserDAO appUserDAO;


@Autowired
private AppRoleDAO appRoleDAO;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

    AppUser appUser=this.appUserDAO.findUserAccount(username);
    if(appUser==null) {
        System.out.println("User not  found! "+username);
        throw new UsernameNotFoundException("User "+username+" was not found in the database");
    }
    System.out.println("Found User :"+appUser);

    List<String> roleNames=this.appRoleDAO.getRoleNames(appUser.getUserId());
    List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();

    if(roleNames!=null) {
        for(String role:roleNames){
            GrantedAuthority authority = new SimpleGrantedAuthority(role);
            grantList.add(authority);
        }
    }
    UserDetails userDetails=(UserDetails)new User(appUser.getUserName(),appUser.getEncrytedPassword(),grantList);
    return userDetails;
   }

}

Application.properties

 ==============================
# DATABASE
# ===============================


  spring.datasource.url=jdbc:mysql://myrdsinstance.ciswboatdreq.us-east-1.rds.amazonaws.com/rdsTest

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>org.o7planning</groupId>
      <artifactId>SpringBootSecurityJPA</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>

      <name>SpringBootSecurityJPA</name>
      <description>Spring Boot +Spring Security + JPA + Remember 
      Me</description>

      <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.0.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>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
           <mainClass>org.o7planning.sbsecurity.SpringBootSecurityJpaApplication</mainClass>
            </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
        </plugin>
    </plugins>
</build>

请帮助我解决此问题

2 个答案:

答案 0 :(得分:0)

尝试一下...

@PersistenceContext
private EntityManager entityManager;

编辑

修改后

  

无法自动配置数据源:未指定'spring.datasource.url',并且无法自动配置嵌入式数据源。

     

原因:无法确定合适的驱动程序类别

您必须在application.properties中提及mysql驱动程序

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver

(or)

spring.datasource.driverClassName=com.mysql.jdbc.Driver

答案 1 :(得分:-1)

尝试通过构造函数在DAO(而非字段)中注入 EntityManager 依赖项。 此外,您还可以在主Spring Boot应用程序类中初始化bean,如下所示:

@Bean
public EntityManager entityManager() {
      return new EntityManager();
}