0

use Placeholder

This commit is contained in:
2021-05-18 18:15:32 +03:00
parent 0ceef5e575
commit ab03ab1271
5 changed files with 61 additions and 10 deletions

View File

@@ -5,6 +5,8 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import ru.dmitriymx.plugin.command.BanCommand; import ru.dmitriymx.plugin.command.BanCommand;
import ru.dmitriymx.plugin.command.UnbanCommand; import ru.dmitriymx.plugin.command.UnbanCommand;
import ru.dmitriymx.plugin.config.BukkitYamlPlaceholderConfigurer;
import ru.dmitriymx.plugin.config.SpringConfig;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -13,8 +15,13 @@ public class BanHammerPlugin extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
this.saveDefaultConfig();
ApplicationContext context = createSpringContext(); ApplicationContext context = createSpringContext();
//TODO для демонстрации
getLogger().info("dburl: " + context.getBean("databaseUrl", String.class));
this.getCommand("ban").setExecutor(context.getBean(BanCommand.class)); this.getCommand("ban").setExecutor(context.getBean(BanCommand.class));
this.getCommand("unban").setExecutor(context.getBean(UnbanCommand.class)); this.getCommand("unban").setExecutor(context.getBean(UnbanCommand.class));
} }
@@ -22,6 +29,7 @@ public class BanHammerPlugin extends JavaPlugin {
private ApplicationContext createSpringContext() { private ApplicationContext createSpringContext() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.setClassLoader(this.getClassLoader()); context.setClassLoader(this.getClassLoader());
context.addBeanFactoryPostProcessor(new BukkitYamlPlaceholderConfigurer(this.getConfig()));
context.registerBean("bukkitLogger", Logger.class, this::getLogger); context.registerBean("bukkitLogger", Logger.class, this::getLogger);
context.register(SpringConfig.class); context.register(SpringConfig.class);
context.refresh(); context.refresh();

View File

@@ -1,10 +0,0 @@
package ru.dmitriymx.plugin;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("ru.dmitriymx.plugin")
public class SpringConfig {
}

View File

@@ -0,0 +1,23 @@
package ru.dmitriymx.plugin.config;
import org.bukkit.configuration.file.FileConfiguration;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import java.util.Optional;
import java.util.Properties;
@SuppressWarnings("deprecation")
public class BukkitYamlPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private final FileConfiguration fileConfiguration;
public BukkitYamlPlaceholderConfigurer(FileConfiguration fileConfiguration) {
this.fileConfiguration = fileConfiguration;
}
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
return Optional.ofNullable(fileConfiguration.getString(placeholder))
.orElseGet(() -> super.resolvePlaceholder(placeholder, props));
}
}

View File

@@ -0,0 +1,26 @@
package ru.dmitriymx.plugin.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("ru.dmitriymx.plugin")
public class SpringConfig {
@Value("${database.url}")
private String databaseUrl;
@Value("${database.user}")
private String databaseUser;
@Value("${database.password}")
private String databasePassword;
//TODO для демонстрации
@Bean("databaseUrl")
public String getDatabaseUrl() {
return databaseUrl;
}
}

View File

@@ -0,0 +1,4 @@
database:
url: some-url
user: some-user
password: some-password