到目前为止,我一直在Spring Batch中使用内存中的H2 DB。然而,现在我切换到连接外部postgres DB。这是我的连接对象(有些模糊):
@Bean
public DataSource postgresDatasource() {
DriverManagerDataSource datasource = new DriverManagerDataSource();
datasource.setDriverClassName("org.postgresql.Driver");
datasource.setUrl("jdbc:postgresql://x.x.x.x:xxxx/blah");
datasource.setUsername("Joe");
datasource.setPassword("password");
return datasource;
}
当我开始申请时,我得到:
原因:org。springframework。jdbc。BadSqlGrammarException:PreparedStatementCallback;错误的SQL语法[从批处理作业实例中选择作业实例ID、作业名称,其中作业名称=?和作业密钥=?];嵌套的异常是org。postgresql。util。PSQLException:错误:关系“批处理作业实例”不存在
然后我读到Spring Batch使用数据库保存元数据以实现其恢复/重试功能,对于嵌入式数据库,这些是Spring Batch默认设置的表。这就解释了为什么我以前从未见过这个错误。
但是,它说我可以设置这个属性:
spring.batch.initialize-schema=never
所以我把这个放在我的application.properties文件中。然而,我仍然得到错误。我将感谢任何想法。
我自己也能解决这个问题。最终,我需要独立于实际目标关系数据库的Spring批处理存储库。所以我找到了这个参考:
https://github.com/spring-projects/spring-batch/blob/342d27bc1ed83312bdcd9c0cb30510f4c469e47d/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/annotation/DefaultBatchConfigurer.java#L84
我能够从该示例中获取DefaultBatchConfigurer类,并通过添加@Qualifier for embedded/local data source对数据源进行了一个小的更改:
@Autowired(required = false)
public void setDataSource(@Qualifier("dataSource") DataSource dataSource) {
this.dataSource = dataSource;
this.transactionManager = new DataSourceTransactionManager(dataSource);
}
然后,在我的Spring批处理阅读器(在我的另一个批处理配置类中)上,我对数据源做了一个小改动,添加了@Qualifier for postgres数据源:
@Bean
public ItemReader<StuffDto> itemReader(@Qualifier("postgresDataSource")DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<StuffDto>()
.name("cursorItemReader")
.dataSource(dataSource)
.sql(GET_DATA)
.rowMapper(new BeanPropertyRowMapper<>(StuffDto.class))
.build();
}
然后最后(或者首先真的像我首先做的那样),我明确地命名了我的数据源bean,以便java可以区分它们以如上所述使用:
@Configuration
public class PersistenceContext {
@Bean(name = "dataSource")
public DataSource dataSource() {
DriverManagerDataSource datasource = new DriverManagerDataSource();
datasource.setDriverClassName("org.h2.Driver");
datasource.setUrl("jdbc:h2:file:/tmp/test");
datasource.setUsername("sa");
datasource.setPassword("");
return datasource;
}
@Bean(name = "postgresDataSource")
public DataSource postgresDatasource() {
DriverManagerDataSource datasource = new DriverManagerDataSource();
datasource.setDriverClassName("org.postgresql.Driver");
datasource.setUrl("jdbc:postgresql://x.x.x.x:xxxx/blah");
datasource.setUsername("joe");
datasource.setPassword("password");
return datasource; }
}
一旦我完成了以上所有操作,错误就消失了,一切都正常了。
在将Django docker容器连接到Postgres数据库时,我收到以下错误。 下面是运行容器的Dockerfile pg_hba.conf->宿主all all 0.0.0.0/0 md5 我已经读到上面的以下细节打开数据库上的连接。
我试图连接到银行,但它给出了这个错误,当我尝试: 应用程序无法启动 描述: 未能配置数据源:无法配置嵌入式数据源。 原因:未能确定合适的驱动程序级别 行动: 考虑下面的内容:如果你想要一个嵌入式数据库(H2,HSQL或DeBy),请把它放在类路径上。如果要从特定配置文件加载数据库设置,则可能需要激活它(当前没有激活的配置文件)。 我的应用程序属性: 我的pom:
如何用Python访问linux服务器机器上的postgre数据库?我已经用putty终端访问了它,但我需要通过python访问数据库中的表,我无法做到这一点。
创建数据库后,必须连接或启动数据库才能正常使用。 语法: 示例: 假设要连接 数据库,参考以下代码: 执行上面命令,得到以下结果:
主要内容:使用SQL * Plus连接到Oracle数据库服务器,使用SQL Developer连接到Oracle数据库服务器在本教程中,您将学习如何使用和SQL Developer 工具连接到Oracle数据库服务器。 使用SQL * Plus连接到Oracle数据库服务器 是安装Oracle数据库服务器或客户端时自动安装的交互式查询工具。 有一个命令行界面,允许您连接到Oracle数据库服务器并交互执行语句。 注意:如果有使用过MySQL或PostgreSQL,与MySQL中的mysql程序
在连接之前,你需要一个受支持的驱动。下面是一些测试过的驱动及其版本,把你所需要的加入到package.json中。 驱动 npm 包 版本 mysql mysql 2.0.0-alpha9 postgres redshift pg 2.6.2 [1] sqlite sqlite3 2.1.7 mongodb mongodb 1.3.19 [1] 如果你要连接到Heroku,请使用版本2.5.0。