我正在尝试从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>
答案 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