История изменений
Исправление bvn13, (текущая версия) :
нет. я хочу наращивать новый функционал, не затрагивая старый. Для старого функционала - пусть работает как раньше, Hibernate, Entity, JPA, свои транзакции. В новом - все через jOOQ. Код пересекаться не будет. Мне сейчас понять, как SpringBoot настроить, чтобы оно работало.
Сейчас настрока для jOOQ выглядит так:
package ru.pivdom.exchange.config;
import com.zaxxer.hikari.HikariDataSource;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;
import org.jooq.impl.DataSourceConnectionProvider;
import org.postgresql.ds.PGSimpleDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
/**
* Created by bvn13 on 20.07.2017.
*/
@Configuration
@EnableTransactionManagement
public class DatasourceConfig {
@Autowired
private Environment env;
@Value("${postgresql.host}")
private String dbHost;
@Value("${postgresql.port}")
private String dbPort;
@Value("${postgresql.database}")
private String dbName;
@Value("${postgresql.user}")
private String dbUser;
@Value("${postgresql.pass}")
private String dbPass;
//@Bean(name = "HikariPool", destroyMethod = "close")
public HikariDataSource dataSource() {
final String url = new StringBuilder()
.append("jdbc:postgresql://")
.append(dbHost)
.append(":")
.append(dbPort)
.append("/")
.append(dbName)
.toString();
HikariDataSource dataSource = new HikariDataSource();
PGSimpleDataSource pgDataSource = new PGSimpleDataSource();
pgDataSource.setServerName(dbHost);
pgDataSource.setPortNumber(Integer.parseInt(dbPort));
pgDataSource.setDatabaseName(dbName);
pgDataSource.setUser(dbUser);
pgDataSource.setPassword(dbPass);
dataSource.setDataSource(pgDataSource);
return dataSource;
}
// JOOQ
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSource() {
return new TransactionAwareDataSourceProxy(dataSource());
}
@Bean
public DataSourceConnectionProvider connectionProvider() {
return new DataSourceConnectionProvider(transactionAwareDataSource());
}
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean()
public DSLContext jooq() {
// Generated source assumes the development DB. Dynamically change it to the production DB name.
// The DB name used in the generated DSL (see the Maven plugin use) will not be the same as
// the production DB, unless running in a local dev env! withSchemata allows us
// to override that during runtime.
//Settings settings = new Settings().withRenderMapping(new RenderMapping().withSchemata(new MappedSchema().withInput("[SANDBOX DB NAME]").withOutput(dbName)));
//return DSL.using(connectionProvider(), SQLDialect.POSTGRES, settings);
return DSL.using(connectionProvider(), SQLDialect.POSTGRES);
}
}
При этом проект запускается, но при обращении к любому старому коду (который через JPA) - выдаются ошибки вида:
2017-08-24 15:08:55.914 WARN 23928 --- [nio-8099-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42703
2017-08-24 15:08:55.914 ERROR 23928 --- [nio-8099-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : ОШИБКА: столбец user0_.userid не существует
Позиция: 8
2017-08-24 15:08:55.916 ERROR 23928 --- [nio-8099-exec-9] w.a.UsernamePasswordAuthenticationFilter : An internal error occurred while trying to authenticate the user.
...
Caused by: org.postgresql.util.PSQLException: ОШИБКА: столбец user0_.userid не существует
пысы. слишком большое сообщение
ППС. Ошибка тут https://pastebin.com/utnN1uPe
Исходная версия bvn13, :
нет. я хочу наращивать новый функционал, не затрагивая старый. Для старого функционала - пусть работает как раньше, Hibernate, Entity, JPA, свои транзакции. В новом - все через jOOQ. Код пересекаться не будет. Мне сейчас понять, как SpringBoot настроить, чтобы оно работало.
Сейчас настрока для jOOQ выглядит так:
package ru.pivdom.exchange.config;
import com.zaxxer.hikari.HikariDataSource;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;
import org.jooq.impl.DataSourceConnectionProvider;
import org.postgresql.ds.PGSimpleDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
/**
* Created by bvn13 on 20.07.2017.
*/
@Configuration
@EnableTransactionManagement
public class DatasourceConfig {
@Autowired
private Environment env;
@Value("${postgresql.host}")
private String dbHost;
@Value("${postgresql.port}")
private String dbPort;
@Value("${postgresql.database}")
private String dbName;
@Value("${postgresql.user}")
private String dbUser;
@Value("${postgresql.pass}")
private String dbPass;
//@Bean(name = "HikariPool", destroyMethod = "close")
public HikariDataSource dataSource() {
final String url = new StringBuilder()
.append("jdbc:postgresql://")
.append(dbHost)
.append(":")
.append(dbPort)
.append("/")
.append(dbName)
.toString();
HikariDataSource dataSource = new HikariDataSource();
PGSimpleDataSource pgDataSource = new PGSimpleDataSource();
pgDataSource.setServerName(dbHost);
pgDataSource.setPortNumber(Integer.parseInt(dbPort));
pgDataSource.setDatabaseName(dbName);
pgDataSource.setUser(dbUser);
pgDataSource.setPassword(dbPass);
dataSource.setDataSource(pgDataSource);
return dataSource;
}
// JOOQ
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSource() {
return new TransactionAwareDataSourceProxy(dataSource());
}
@Bean
public DataSourceConnectionProvider connectionProvider() {
return new DataSourceConnectionProvider(transactionAwareDataSource());
}
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean()
public DSLContext jooq() {
// Generated source assumes the development DB. Dynamically change it to the production DB name.
// The DB name used in the generated DSL (see the Maven plugin use) will not be the same as
// the production DB, unless running in a local dev env! withSchemata allows us
// to override that during runtime.
//Settings settings = new Settings().withRenderMapping(new RenderMapping().withSchemata(new MappedSchema().withInput("[SANDBOX DB NAME]").withOutput(dbName)));
//return DSL.using(connectionProvider(), SQLDialect.POSTGRES, settings);
return DSL.using(connectionProvider(), SQLDialect.POSTGRES);
}
}
При этом проект запускается, но при обращении к любому старому коду (который через JPA) - выдаются ошибки вида:
2017-08-24 15:08:55.914 WARN 23928 --- [nio-8099-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42703
2017-08-24 15:08:55.914 ERROR 23928 --- [nio-8099-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : ОШИБКА: столбец user0_.userid не существует
Позиция: 8
2017-08-24 15:08:55.916 ERROR 23928 --- [nio-8099-exec-9] w.a.UsernamePasswordAuthenticationFilter : An internal error occurred while trying to authenticate the user.
...
Caused by: org.postgresql.util.PSQLException: ОШИБКА: столбец user0_.userid не существует
пысы. слишком большое сообщение