Spring boot игнорирует / не работает с пользовательским MySqlDialect - PullRequest
0 голосов
/ 27 июня 2018

Это мой собственный диалект

public class MyOwnSQLDialect extends MySQL5Dialect {

    public MyOwnSQLDialect() {
        super();
        this.registerFunction("group_concat", new SQLFunctionTemplate(StandardBasicTypes.STRING, "group_concat(?1)"));
    }
}

вот моя собственность, чтобы использовать его

application.properties

**spring.jpa.properties.hibernate.dialect=demo.orm.config.MyOwnSQLDialect**

Я использую загрузку Spring с данными Spring JPA.

@PropertySource(value = {"classpath:application.properties"})
@ComponentScan(value = {"demo.eaze.*"})
//@EnableTransactionManagement
@EnableJpaRepositories
@EnableJpaAuditing
@EnableWebFlux
public class Application {

    public static void main(String[] args) {
        try (AnnotationConfigApplicationContext context
                     = new AnnotationConfigApplicationContext(
                Application.class)) {

            context.getBean(NettyContext.class).onClose().block();
        }
    }

    @Bean
    public NettyContext nettyContext(ApplicationContext context) {
        HttpHandler handler = WebHttpHandlerBuilder
                .applicationContext(context).build();
        ReactorHttpHandlerAdapter adapter
                = new ReactorHttpHandlerAdapter(handler);
        HttpServer httpServer = HttpServer.create("localhost", 8080);
        return httpServer.newHandler(adapter).block();
    }
}

Другой файл:

@Configuration
@EnableAutoConfiguration
public class ApplicationConfigs {

    @PostConstruct
    void init() {
        System.out.println("ApplicationConfigs.init");
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    }
}

Примечание: Приведенный выше код работает, если я использую JPA / Hibernate, но когда я использую это с загрузочным проектом Spring, он не работает.

Моя основная идея добавить собственный диалект заключается в использовании некоторых функций SQL, таких как GROUP_CONCAT в API построителя критериев JPA

build.gradle

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-webflux:2.0.2.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-data-jpa:2.0.2.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-logging:2.0.2.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-actuator:2.0.2.RELEASE")
    compile("org.springframework.boot:spring-boot-devtools:2.0.2.RELEASE")
    compile("io.jsonwebtoken:jjwt:0.9.0")
    //compile("com.h2database:h2")
//    compile("com.fasterxml.jackson.datatype:jjwt:jackson-datatype-jsr310")
    compile 'mysql:mysql-connector-java:8.0.11'

    //  providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    compile 'org.projectlombok:lombok:1.16.20'
}

1 Ответ

0 голосов
/ 28 июня 2018

Проблема в том, что вы настраиваете свой диалект, используя механизм Spring Boot. Но ваше приложение (запущенное вашим методом main не является приложением Spring Boot, поэтому на самом деле ни один из механизмов Spring Boot не происходит.

Чтобы это исправить, сделайте ваше приложение подходящим Spring Boot Application или используйте стандартный способ Hibernate для настройки своего диалекта.

Порядок работы Spring Boot приведен в этом руководстве: https://spring.io/guides/gs/spring-boot/

Для настройки SqlDialect в Hibernate см .: https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-optional-dialects

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...