Spring Boot忽略/不使用自定义MySqlDialect

时间:2018-06-27 15:23:28

标签: java spring spring-boot spring-data-jpa jpa-2.0

这是我的自定义方言

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 JPA数据的Spring Boot。

@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 Boot项目中使用它时,它将无法工作。

我添加自定义方言的主要想法是由于使用了一些SQL函数,例如 JPA Criteria builder API中的GROUP_CONCAT

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 :(得分:0)

问题是您使用Spring Boot机制配置了方言。 但是您的应用程序(由main方法启动的应用程序不是Spring Boot应用程序,因此,实际上没有发生任何Spring Boot机制。

为解决此问题,使您的应用程序成为适当的Spring Boot Application或使用标准的Hibernate方式配置您的方言。

有关Spring Boot的方法,请参见本教程:https://spring.io/guides/gs/spring-boot/

有关在Hibernate中设置SqlDialect的信息,请参见:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-optional-dialects