使用JPA / Hibernate

时间:2017-12-28 13:05:28

标签: postgresql hibernate jpa spring-boot spring-data-jpa

我正在尝试从PostgreSQL DB

访问Spring-Boot application using JPA/Hibernate

Spring-Boot应用程序包含一个RestController,它在某些URL上的用户事件上将连接到PostgreSQL DB并在DB中添加一个条目。

为了与PostgreSQL DB通信,RestController使用Spring服务实例,该类的自动装配JPARepository。

对于PostgreSQL数据库,我已经定义了一个DBConfig类,该类使用Spring @Configuration注释并具有createDataSource()方法(见下文)。

我没有将任何DBConnection类定义为@Configuration OR 在我的DBConfig类中没有指定任何JDBC连接为@Bean,因为我假设添加{{1 DBConfig将使用classpath下的@Configuration文件在Spring ApplicationContext中添加连接配置。

我是否需要在DBConfig类中定义一个单独的连接bean? OR 我是否需要单独定义DBConnection类?

我是否需要在DataSource.setJdbcUrl(String)和src / main / resources / application.properties或两者中的任何一个定义连接属性?

我是否需要在pom.xml中添加除下面列出的以外的任何其他依赖项?

如何从Spring-Boot指定和创建与PostgreSQL DB的连接?

我在这里错过了任何配置吗? (因为我是Spring JPA / Hibernate的新手)

  

DBConfig类

application.properties

它是一个Spring Service类,带有自动装配的存储库实例来处理PostgreSQL DB

  

带有JPARepository Instance(自动装配)的ServiceImpl类

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.mchange.v2.c3p0.ComboPooledDataSource;

@Configuration
public class DBConfig {
    @Bean
    public DataSource createDataSource() throws Exception {
        ComboPooledDataSource ds = new ComboPooledDataSource();
        ds.setJdbcUrl("jdbc:postgresql://localhost:5432/my_db?user=postgres_user&password=password");
        ds.setDriverClass("org.postgresql.Driver");
        return ds;
    }
}
  

我的Spring-Boot RestController类

@Service("webhookService")
public class MyServiceImpl implements MyService {

       private static final Logger log = LoggerFactory.getLogger(MyServiceImpl.class);

       @Autowired
       private MyRepository myRepository;

       //methods for dealing with DB e.g. find, add, delete, update, etc.

}
  

src / main / resources / application.properties

@RestController
public class MyController {

       private static final Logger log = LoggerFactory.getLogger(MyController.class);

       @Autowired
       MyService myService;
  

Spring-Boot-data / JPA / PostgreSQL依赖项(来自pom.xml)

#Datasource properties
spring.datasource.url=jdbc:postgresql://localhost:5432/my_db
spring.datasource.username=postgres_user 
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=create-drop

#Hibernate properties
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.generate-ddl=true
  

在Tomcat上部署.WAR时出现Stacktrace错误

<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>mchange-commons-java</artifactId>
    <version>0.2.11</version>
</dependency>
<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.1-901-1.jdbc4</version>
    <scope>runtime</scope>
</dependency>

1 个答案:

答案 0 :(得分:1)

您无需为Postgres数据库定义@Configuration或Datasource。如果您正在使用spring-boot-starter-data-jpa依赖项,并且Postgres Java驱动程序也在您的类路径中(包含在您的pom.xml中),Spring会自动将您的应用程序连接到您的数据库。所以只需在您的类中定义连接字符串application.properties并删除@Configuration类。

您的存储库可能如下所示:

public interface MyRepository extends CrudRepository<YourClass, Long>{

   // Spring gives your all the basic CRUD operations per default

}

或者如果你想使用JpaRepository:

public interface MyRepository extends JpaRepository<YourClass, Long>{

   // Spring gives your all the basic database operations per default

}

如果您需要示例项目,请查看:https://github.com/springframeworkguru/spring-boot-postgress-example/blob/master/pom.xml