LINUX.ORG.RU

История изменений

Исправление 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 не существует

пысы. слишком большое сообщение