use of org.jooq.impl.DataSourceConnectionProvider in project kork by spinnaker.
the class SqlTestUtil method initDatabase.
public static TestDatabase initDatabase(String jdbcUrl, SQLDialect dialect, String dbName) {
HikariConfig cpConfig = new HikariConfig();
cpConfig.setJdbcUrl(jdbcUrl);
cpConfig.setMaximumPoolSize(5);
HikariDataSource dataSource = new HikariDataSource(cpConfig);
DefaultConfiguration config = new DefaultConfiguration();
config.set(new DataSourceConnectionProvider(dataSource));
config.setSQLDialect(dialect);
if (dialect == H2) {
config.settings().withRenderNameStyle(AS_IS);
}
DSLContext context = new DefaultDSLContext(config);
Liquibase migrate;
try {
DatabaseChangeLog changeLog = new DatabaseChangeLog();
changeLog.setChangeLogParameters(new ChangeLogParameters(DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(dataSource.getConnection()))));
changeLog.includeAll("db/changelog/", false, null, false, Comparator.comparing(String::toString), new ClassLoaderResourceAccessor(), new ContextExpression(), new LabelExpression(), false);
migrate = new Liquibase(changeLog, new ClassLoaderResourceAccessor(), DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(dataSource.getConnection())));
} catch (DatabaseException | SQLException | SetupException e) {
throw new DatabaseInitializationFailed(e);
}
try {
migrate.update(dbName);
} catch (LiquibaseException e) {
throw new DatabaseInitializationFailed(e);
}
return new TestDatabase(dataSource, context, migrate);
}
use of org.jooq.impl.DataSourceConnectionProvider in project curiostack by curioswitch.
the class DatabaseModule method dbContext.
@Provides
@Singleton
static DSLContext dbContext(DataSource dataSource, DatabaseConfig config, @ForDatabase ListeningExecutorService dbExecutor) {
Configuration configuration = new DefaultConfiguration().set(dbExecutor).set(SQLDialect.MYSQL).set(new Settings().withRenderSchema(false)).set(new DataSourceConnectionProvider(dataSource));
if (config.getLogQueries()) {
configuration.set(new QueryLogger());
}
DSLContext ctx = DSL.using(configuration);
// Eagerly trigger JOOQ classinit for better startup performance.
ctx.select().from("curio_server_framework_init").getSQL();
return ctx;
}
use of org.jooq.impl.DataSourceConnectionProvider in project spring-boot by spring-projects.
the class JooqAutoConfigurationTests method jooqWithDefaultConnectionProvider.
@Test
void jooqWithDefaultConnectionProvider() {
this.contextRunner.withUserConfiguration(JooqDataSourceConfiguration.class).run((context) -> {
DSLContext dsl = context.getBean(DSLContext.class);
ConnectionProvider connectionProvider = dsl.configuration().connectionProvider();
assertThat(connectionProvider).isInstanceOf(DataSourceConnectionProvider.class);
DataSource connectionProviderDataSource = ((DataSourceConnectionProvider) connectionProvider).dataSource();
assertThat(connectionProviderDataSource).isInstanceOf(TransactionAwareDataSourceProxy.class);
});
}
use of org.jooq.impl.DataSourceConnectionProvider in project steve by RWTH-i5-IDSG.
the class BeanConfiguration method dslContext.
/**
* Can we re-use DSLContext as a Spring bean (singleton)? Yes, the Spring tutorial of
* Jooq also does it that way, but only if we do not change anything about the
* config after the init (which we don't do anyways) and if the ConnectionProvider
* does not store any shared state (we use DataSourceConnectionProvider of Jooq, so no problem).
*
* Some sources and discussion:
* - http://www.jooq.org/doc/3.6/manual/getting-started/tutorials/jooq-with-spring/
* - http://jooq-user.narkive.com/2fvuLodn/dslcontext-and-threads
* - https://groups.google.com/forum/#!topic/jooq-user/VK7KQcjj3Co
* - http://stackoverflow.com/questions/32848865/jooq-dslcontext-correct-autowiring-with-spring
*/
@Bean
public DSLContext dslContext() {
initDataSource();
Settings settings = new Settings().withAttachRecords(false).withExecuteLogging(CONFIG.getDb().isSqlLogging());
// Configuration for JOOQ
org.jooq.Configuration conf = new DefaultConfiguration().set(SQLDialect.MYSQL).set(new DataSourceConnectionProvider(dataSource)).set(settings);
return DSL.using(conf);
}
use of org.jooq.impl.DataSourceConnectionProvider in project jOOQ by jOOQ.
the class SparkCRUD method main.
public static void main(String[] args) throws Exception {
final BasicDataSource ds = new BasicDataSource();
final Properties properties = new Properties();
properties.load(SparkCRUD.class.getResourceAsStream("/config.properties"));
ds.setDriverClassName(properties.getProperty("db.driver"));
ds.setUrl(properties.getProperty("db.url"));
ds.setUsername(properties.getProperty("db.username"));
ds.setPassword(properties.getProperty("db.password"));
final ConnectionProvider cp = new DataSourceConnectionProvider(ds);
final Configuration configuration = new DefaultConfiguration().set(cp).set(SQLDialect.H2).set(new ThreadLocalTransactionProvider(cp, true));
final DSLContext ctx = DSL.using(configuration);
final JSONFormat format = new JSONFormat().format(true).header(false).recordFormat(RecordFormat.OBJECT);
// Creates a new book resource, will return the ID to the created resource
// author and title are sent as query parameters e.g. /books?author=Foo&title=Bar
post("/books", (request, response) -> {
return ctx.transactionResult(() -> {
AuthorRecord author = upsertAuthor(ctx, request);
BookRecord book = ctx.newRecord(BOOK);
book.setAuthorId(author.getId());
book.setTitle(request.queryParams("title"));
book.store();
// 201 Created
response.status(201);
return book.formatJSON(format);
});
});
// Gets the book resource for the provided id
get("/books/:id", (request, response) -> {
Record2<String, String> book = ctx.select(BOOK.TITLE, AUTHOR.NAME).from(BOOK).join(AUTHOR).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)).where(BOOK.ID.eq(BOOK.ID.getDataType().convert(request.params(":id")))).fetchOne();
if (book != null) {
return book.formatJSON(format);
} else {
// 404 Not found
response.status(404);
return "{\"error\":\"Book not found\"}";
}
});
// Updates the book resource for the provided id with new information
// author and title are sent as query parameters e.g. /books/<id>?author=Foo&title=Bar
put("/books/:id", (request, response) -> {
return ctx.transactionResult(() -> {
BookRecord book = ctx.selectFrom(BOOK).where(BOOK.ID.eq(BOOK.ID.getDataType().convert(request.params(":id")))).fetchOne();
if (book != null) {
AuthorRecord author = upsertAuthor(ctx, request);
String newAuthor = request.queryParams("author");
String newTitle = request.queryParams("title");
if (newAuthor != null)
book.setAuthorId(author.getId());
if (newTitle != null)
book.setTitle(newTitle);
book.update();
return book.formatJSON(format);
} else {
// 404 Not found
response.status(404);
return "{\"error\":\"Book not found\"}";
}
});
});
// Deletes the book resource for the provided id
delete("/books/:id", (request, response) -> {
return ctx.transactionResult(() -> {
BookRecord book = ctx.deleteFrom(BOOK).where(BOOK.ID.eq(BOOK.ID.getDataType().convert(request.params(":id")))).returning().fetchOne();
if (book != null) {
return book.formatJSON(format);
} else {
// 404 Not found
response.status(404);
return "{\"error\":\"Book not found\"}";
}
});
});
// Gets all available book resources
get("/books", (request, response) -> {
return ctx.select(BOOK.ID, BOOK.TITLE).from(BOOK).fetch().formatJSON(format);
});
}
Aggregations