@value должен работать (Im asuming вашего класса находится под com.example * пакет, так как вы сканируете этот пакет.), Но если вы хотите сделать это по-другому, это то, что им с помощью:
public class JpaConfiguration {
public static final String TRANSACTION_MANAGER_NAME = "jpaTransactionManager";
@Autowired
Environment applicationProperties;
Затем использовать его
@Bean
public DriverManagerDataSource driverManagerDataSource() {
DriverManagerDataSource driverConfig = new DriverManagerDataSource();
driverConfig.setDriverClassName(applicationProperties.getProperty("data.jpa.driverClass"));
driverConfig.setUrl(applicationProperties
.getProperty("data.jpa.connection.url"));
driverConfig.setUsername(applicationProperties
.getProperty("data.jpa.username"));
driverConfig.setPassword(applicationProperties
.getProperty("data.jpa.password"));
return driverConfig;
}
UPDATE после получения GitHub репо
Я не знаю, что вы пытаетесь построить, но:
Если вы сделаете это:
@Override
public void run(String... strings) throws Exception {
//System.out.println(email);
Email email = new Email();
email.sendMail();
}
Затем вы создаете экземпляр класса, а не весной. поэтому вы не должны создавать экземпляр самостоятельно там, где должно быть весна. Тем не менее, я не знаю, создаете ли вы веб-приложение приложение командной строки или и то, и другое.
Это говорит, что плохо дать вам небольшое решение, чтобы показать вам, что инъекция зависимости фактически работает.
1_ добавить геттер на ваш адрес электронной почты в классе электронной почты. удалите интерфейс CommandLine (если вы хотите реализовать это, я бы посоветовал вам поместить функции CommandLine в другой пакет, например Controller);
А затем запустить приложение, как это:
@SpringBootApplication
@ComponentScan(basePackages = "com.example")
public class MailTestApplication {
@Value("${admin.mail}")
String email;
public static void main(String[] args) {
// SpringApplication.run(MailTestApplication.class, args);
final ConfigurableApplicationContext context = new SpringApplicationBuilder(MailTestApplication.class).run(args);
Email e = context.getBean(Email.class);
System.out.println(e.getEmail());
}
Ключ, что я хочу показать, что экземпляр создается при помощи пружинных Вот почему жгуты работ. и электронная почта печатается в консоли. Что касается класса электронной почты:
@Component
public class Email {
// @Autowired
// private MailSender sender;
@Value("${admin.mail}")
String email;
public Email() {
}
public void sendMail() {
SimpleMailMessage msg = new SimpleMailMessage();
System.out.println(email);
msg.setTo("[email protected]");
msg.setSubject("Send mail by Spring Boot");
msg.setText("Send mail by Spring Boot");
// sender.send(msg);
}
public String getEmail() {
return email;
}
}
Я Закомментируйте MailSender, так как я думаю, что вам нужно настроить, что тоже, я сделал пользовательский MailSender, который использует Gmail и другие для Mailchimp, что я могу поделиться с вами, если вам нужно , но опять же я не знаю, каковы ваши намерения с приложением.
Надеемся, что информация вам поможет.
Если вы обнаружили ошибку. Вставьте здесь стек. – harshavmb
Нет ошибки при чтении собственности. Проблема заключается в том, что значение всегда равно null, когда я пытаюсь прочитать его из любого класса, который не является основным. –
Я не знаком с весенним ботинком.Я подозреваю, что это может быть проблема объема или зависимости. Я бы предложил вам получить это свойство в основном классе, сохранить в переменной-члене, создать геттеры и сеттеры и попытаться получить доступ к методам getter из других классов, введя экземпляр основного класса. Этот подход будет лучше, поскольку вы не будете повторно обращаться к файлу свойств. – harshavmb