Как я могу избежать вызова файла свойств и свойств его каждый раз? - PullRequest
0 голосов
/ 15 января 2019

Я написал ниже весеннее загрузочное приложение с аргументами.

java jar ... --credential="path\credentials.properties"

Беги так из консоли. Я получаю путь к файлу свойств из консоли и все время, когда мне нужно свойство, сначала загружаю файл свойств, а затем получаю свое свойство с моим ключом. Как я могу избежать этого? Я просто хочу загрузить файл свойств один раз, а потом всегда хочу использовать этот первый загруженный файл. Я не хочу загружать снова и снова. Вот так я не хочу называть его свойства.

@SpringBootApplication
@Slf4j
class ProRunner implements CommandLineRunner {

@Autowired
AnalyzeManager analyzeManager;

@Autowired
AuthService authService;

@Autowired
WriterService writerService;

    static void main(String[] args) {
        SpringApplication.run(ProRunner.class, args);        
}

@Override
void run(String... args) throws Exception {
    try {
        String token = authService.postEntity("url", args).token;
        Map dataSet = analyzeManager.bulkCreate(args);
        writerService.write(args, dataSet)
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

В каждом сервисе (authService, analyManager, writerService) я загружаю свойства в соответствии с аргументами. Позже продолжу мой процесс.

Чтобы загрузить свойства, я создаю метод Util и вызываю его каждый раз.

public class Utils {
    public static Properties getProperties(String...args) throws IOException {
        File file = new File(args[0]);
        Properties properties = new Properties();
        InputStream in = new FileInputStream(file);
        properties.load(in);
        return properties;
    }
}

Файл свойств содержит такие вещи:

- username
- password
- outputFileName
- startDate
- endDate
...

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Проблема решена, как показано ниже:

@SpringBootApplication
@Slf4j
class ProRunner implements CommandLineRunner {

@Autowired
AnalyzeManager analyzeManager;

@Autowired
AuthService authService;

@Autowired
WriterService writerService;

    static void main(String[] args) {
        System.setProperty("spring.config.additional-location","credential from args");
        SpringApplication.run(ProRunner.class, args);        
}

@Override
void run(String... args) throws Exception {
    try {
        String token = authService.postEntity("url").token;
        Map dataSet = analyzeManager.bulkCreate();
        writerService.write(dataSet)
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

Добавлен новый файл конфигурации, как показано ниже:

@Configuration
public class ConfigProperties {

    @Value("${cred.username}")
    private String userName;
    @Value("${cred.password}")
    private String password;
    @Value("${date.startDate}")
    private String startDate;
    @Value("{team.id}")
    private String teamId;

    public String getUserName() {
        return userName;
    }

    public String getPassword() {
        return password;
    }

    public String getStartDate() {
        return startDate;
    }

    public String getTeamId() {
        return teamId;
    }
}

А позже вызвать свойства из другого класса:

@Autowired
private ConfigProperties configProperties;

И назовите свойство так:

configProperties.getUserName();

Большое спасибо за помощь @Barath, @Andrew S

0 голосов
/ 16 января 2019

Вы можете зарегистрировать файл свойств как источник свойств SpringBoot

@PropertySource("${credential}")
Переменные

и credential (путь к вашему файлу свойств) будут считываться из аргументов командной строки. Затем вы можете использовать аннотацию @Value следующим образом:

@Value("${property_name}") String property;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...