From ab03ab1271cb2e24faf717e0dad53ca37bb1b177 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Tue, 18 May 2021 18:15:32 +0300 Subject: [PATCH] use Placeholder --- .../ru/dmitriymx/plugin/BanHammerPlugin.java | 8 ++++++ .../ru/dmitriymx/plugin/SpringConfig.java | 10 ------- .../BukkitYamlPlaceholderConfigurer.java | 23 ++++++++++++++++ .../dmitriymx/plugin/config/SpringConfig.java | 26 +++++++++++++++++++ src/main/resources/config.yml | 4 +++ 5 files changed, 61 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/ru/dmitriymx/plugin/SpringConfig.java create mode 100644 src/main/java/ru/dmitriymx/plugin/config/BukkitYamlPlaceholderConfigurer.java create mode 100644 src/main/java/ru/dmitriymx/plugin/config/SpringConfig.java create mode 100644 src/main/resources/config.yml diff --git a/src/main/java/ru/dmitriymx/plugin/BanHammerPlugin.java b/src/main/java/ru/dmitriymx/plugin/BanHammerPlugin.java index bf18423..f5b793b 100644 --- a/src/main/java/ru/dmitriymx/plugin/BanHammerPlugin.java +++ b/src/main/java/ru/dmitriymx/plugin/BanHammerPlugin.java @@ -5,6 +5,8 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import ru.dmitriymx.plugin.command.BanCommand; import ru.dmitriymx.plugin.command.UnbanCommand; +import ru.dmitriymx.plugin.config.BukkitYamlPlaceholderConfigurer; +import ru.dmitriymx.plugin.config.SpringConfig; import java.util.logging.Logger; @@ -13,8 +15,13 @@ public class BanHammerPlugin extends JavaPlugin { @Override public void onEnable() { + this.saveDefaultConfig(); + ApplicationContext context = createSpringContext(); + //TODO для демонстрации + getLogger().info("dburl: " + context.getBean("databaseUrl", String.class)); + this.getCommand("ban").setExecutor(context.getBean(BanCommand.class)); this.getCommand("unban").setExecutor(context.getBean(UnbanCommand.class)); } @@ -22,6 +29,7 @@ public class BanHammerPlugin extends JavaPlugin { private ApplicationContext createSpringContext() { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.setClassLoader(this.getClassLoader()); + context.addBeanFactoryPostProcessor(new BukkitYamlPlaceholderConfigurer(this.getConfig())); context.registerBean("bukkitLogger", Logger.class, this::getLogger); context.register(SpringConfig.class); context.refresh(); diff --git a/src/main/java/ru/dmitriymx/plugin/SpringConfig.java b/src/main/java/ru/dmitriymx/plugin/SpringConfig.java deleted file mode 100644 index 9c9c964..0000000 --- a/src/main/java/ru/dmitriymx/plugin/SpringConfig.java +++ /dev/null @@ -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 { - -} diff --git a/src/main/java/ru/dmitriymx/plugin/config/BukkitYamlPlaceholderConfigurer.java b/src/main/java/ru/dmitriymx/plugin/config/BukkitYamlPlaceholderConfigurer.java new file mode 100644 index 0000000..1b63b95 --- /dev/null +++ b/src/main/java/ru/dmitriymx/plugin/config/BukkitYamlPlaceholderConfigurer.java @@ -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)); + } +} diff --git a/src/main/java/ru/dmitriymx/plugin/config/SpringConfig.java b/src/main/java/ru/dmitriymx/plugin/config/SpringConfig.java new file mode 100644 index 0000000..eabeedf --- /dev/null +++ b/src/main/java/ru/dmitriymx/plugin/config/SpringConfig.java @@ -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; + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..ec03bea --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,4 @@ +database: + url: some-url + user: some-user + password: some-password