r2dbc:
init 源码:
public class R2dbcScriptDatabaseInitializer extends AbstractScriptDatabaseInitializer {
private final ConnectionFactory connectionFactory;
/**
* Creates a new {@code R2dbcScriptDatabaseInitializer} that will initialize the
* database recognized by the given {@code connectionFactory} using the given
* {@code settings}.
* @param connectionFactory connectionFactory for the database
* @param settings initialization settings
*/
public R2dbcScriptDatabaseInitializer(ConnectionFactory connectionFactory,
DatabaseInitializationSettings settings) {
super(settings);
this.connectionFactory = connectionFactory;
}
@Override
protected boolean isEmbeddedDatabase() {
return EmbeddedDatabaseConnection.isEmbedded(this.connectionFactory);
}
@Override
protected void runScripts(List<Resource> scripts, boolean continueOnError, String separator, Charset encoding) {
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.setContinueOnError(continueOnError);
populator.setSeparator(separator);
if (encoding != null) {
populator.setSqlScriptEncoding(encoding.name());
}
for (Resource script : scripts) {
populator.addScript(script);
}
populator.populate(this.connectionFactory).block();
}
}
class R2dbcScriptDatabaseInitializerDetector extends AbstractBeansOfTypeDatabaseInitializerDetector {
@Override
protected Set<Class<?>> getDatabaseInitializerBeanTypes() {
return Collections.singleton(R2dbcScriptDatabaseInitializer.class);
}
}
R2DBCScirpt 的方法:
private static final OptionsCapableWrapper optionsCapableWrapper;
static {
if (ClassUtils.isPresent("io.r2dbc.pool.ConnectionPool", ConnectionFactoryBuilder.class.getClassLoader())) {
optionsCapableWrapper = new PoolingAwareOptionsCapableWrapper();
}
else {
optionsCapableWrapper = new OptionsCapableWrapper();
}
}
private static final String COLON = ":";
private final Builder optionsBuilder;
private ConnectionFactoryBuilder(Builder optionsBuilder) {
this.optionsBuilder = optionsBuilder;
}
/**
* Initialize a new {@link ConnectionFactoryBuilder} based on the specified R2DBC url.
* @param url the url to use
* @return a new builder initialized with the options exposed in the specified url
* @see EmbeddedDatabaseConnection#getUrl(String)
*/
public static ConnectionFactoryBuilder withUrl(String url) {
Assert.hasText(url, () -> "Url must not be null");
return withOptions(ConnectionFactoryOptions.parse(url).mutate());
}
/**
* Initialize a new {@link ConnectionFactoryBuilder} based on the specified
* {@link Builder options}.
* @param options the options to use to initialize the builder
* @return a new builder initialized with the settings defined in the given
* {@link Builder options}
*/
public static ConnectionFactoryBuilder withOptions(Builder options) {
return new ConnectionFactoryBuilder(options);
}
/**
* Initialize a new {@link ConnectionFactoryBuilder} derived from the options of the
* specified {@code connectionFactory}.
* @param connectionFactory the connection factory whose options are to be used to
* initialize the builder
* @return a new builder initialized with the options from the connection factory
* @since 2.5.1
*/
public static ConnectionFactoryBuilder derivedFrom(ConnectionFactory connectionFactory) {
ConnectionFactoryOptions options = extractOptionsIfPossible(connectionFactory);
if (options == null) {
throw new IllegalArgumentException(
"ConnectionFactoryOptions could not be extracted from " + connectionFactory);
}
return withOptions(options.mutate());
}
private static ConnectionFactoryOptions extractOptionsIfPossible(ConnectionFactory connectionFactory) {
OptionsCapableConnectionFactory optionsCapable = OptionsCapableConnectionFactory.unwrapFrom(connectionFactory);
if (optionsCapable != null) {
return optionsCapable.getOptions();
}
return null;
}
/**
* Configure additional options.
* @param options a {@link Consumer} to customize the options
* @return this for method chaining
*/
public ConnectionFactoryBuilder configure(Consumer<Builder> options) {
options.accept(this.optionsBuilder);
return this;
}
/**
* Configure the {@linkplain ConnectionFactoryOptions#USER username}.
* @param username the connection factory username
* @return this for method chaining
*/
publ
R2DBC数据库初始化与连接配置

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



