Hello,
I'm very new to jOOQ library and I really like this library based on what I
saw in the official web site.
I'm working on a Spring Boot application which I package as a *war* file to
deploy to an external Tomcat Server.
First I want to use jOOQ only as a SQL query builder, and I have to connect
to a database with many tables and don't want to generate sources every
time because it takes a while to finish.
Is it possible, if so, then can you give me some hints or guide me how to
do that ?
Thanks in advance
I want to use the Programmatic configuration to be able to access some
environment variables for database credentials through
*Environment*
So, I created a @RestController and @Autowired the Environment bean and
exposed through a URL to be able to Generate the sources only when I want
to:
@RestController
@RequestMapping("jooq/generate-sources")
public class CodeGeneratorController {
private Environment env;
@Autowired
public CodeGeneratorController(Environment env) {
this.env = env;
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity generateSources() throws Exception {
Configuration configuration = new Configuration()
.withLogging(Logging.INFO)
.withJdbc(new Jdbc()
.withDriver("com.mysql.jdbc.Driver")
.withUsername(env.getRequiredProperty("DB_USERNAME"))
.withPassword(env.getRequiredProperty("DB_PASSWORD"))
.withUrl(env.getRequiredProperty("DB_URL")))
.withGenerator(new Generator()
.withDatabase(new Database()
.withName("org.jooq.util.mysql.MySQLDatabase")
.withIncludes(".*")
.withInputSchema("my_schema"))
.withTarget(new Target()
.withEncoding("UTF-8")
.withPackageName("com.my.package.data.generated-sources")
.withDirectory("src/main/java")));
GenerationTool.generate(configuration);
return ResponseEntity.ok().build();
}
}
Also jOOQ related I have these dependencies on my pom.xml file:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jooq</artifactId>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen</artifactId>
</dependency>
Then when I try to start the application (with IntelliJ IDEA, already
configured to run on Tomcat) I see this message:
2017-04-02 19:53:10.591 WARN 92073 --- [on(2)-127.0.0.1]
ationConfigEmbeddedWebApplicationContext : Exception encountered during
context initialization - cancelling refresh attempt: org.springframework.
beans.factory.BeanCreationException: Error creating bean with name
'dslContext' defined in class path resource [org/springframework/boot/
autoconfigure/jooq/JooqAutoConfiguration$DslContextConfiguration.class]:
Post-processing of merged bean definition failed; nested exception is java.
lang.StackOverflowError
And then this exception:
org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'dslContext' defined in class path resource
[org/springframework/boot/autoconfigure/jooq/JooqAutoConfiguration$DslContextConfiguration.class]:
Post-processing of merged bean definition failed; nested exception is
java.lang.StackOverflowError
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:526)
~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at
org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at
org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at
org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
at
org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
[spring-web-4.3.7.RELEASE.jar:4.3.7.RELEASE]
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5240)
[catalina.jar:8.0.33]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
[catalina.jar:8.0.33]
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
[catalina.jar:8.0.33]
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
[catalina.jar:8.0.33]
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
[catalina.jar:8.0.33]
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1696)
[catalina.jar:8.0.33]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[na:1.8.0_60]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[na:1.8.0_60]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:1.8.0_60]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_60]
at
org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
[tomcat-coyote.jar:8.0.33]
at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
[na:1.8.0_60]
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
[na:1.8.0_60]
at
org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:484)
[catalina.jar:8.0.33]
at
org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:433)
[catalina.jar:8.0.33]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[na:1.8.0_60]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[na:1.8.0_60]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:1.8.0_60]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_60]
at
org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
[tomcat-coyote.jar:8.0.33]
at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
[na:1.8.0_60]
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
[na:1.8.0_60]
at
javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1471)
[na:1.8.0_60]
at
javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
[na:1.8.0_60]
at
javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1312)
[na:1.8.0_60]
at
javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1404)
[na:1.8.0_60]
at
javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:832)
[na:1.8.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[na:1.8.0_60]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[na:1.8.0_60]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:1.8.0_60]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_60]
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
[na:1.8.0_60]
at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_60]
at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_60]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_60]
at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_60]
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
[na:1.8.0_60]
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
[na:1.8.0_60]
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$256(TCPTransport.java:683)
[na:1.8.0_60]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_60]
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
[na:1.8.0_60]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
~[na:1.8.0_60]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
~[na:1.8.0_60]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_60]....
Hope I was clear explaining my problem
Thanks
--
You received this message because you are subscribed to the Google Groups "jOOQ
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.