В моем приложении Spring Boot Application я реализовал следующий класс с методом вызова хранимой процедуры.
@Component
@ConfigurationProperties(prefix = "spring")
public class FmTrfUtil {
static int returnVal;
@Value("${spring.datasource.url}")
static String url;
public static int insertFmTrfs(List<String> trfs, String source) {
System.out.println(url);
EntityManager em = Persistence.createEntityManagerFactory("RIStore_FM").createEntityManager();
Session session = em.unwrap( Session.class );
final String[] trfArray = trfs.toArray(new String[trfs.size()]);
final String src = source;
session.doWork( new Work(){
public void execute(Connection conn) throws SQLException {
CallableStatement stmt = null;
OracleConnection oraCon = conn.unwrap(OracleConnection.class);
Array array = oraCon.createARRAY("VARCHAR2_TAB_T", trfArray);
stmt = conn.prepareCall("{? = call FM_TRF_UTIL.process_fm_trf(?,?)}");
stmt.registerOutParameter(1, Types.INTEGER);
stmt.setArray(2, array);
stmt.setString(3, src);
stmt.execute();
returnVal = stmt.getInt(1);
}
});
return returnVal;
}
}
Поскольку для вызова хранимой процедуры требуется подключение к базе данных, мне нужно загрузить соответствующие значения свойств из application.properties:
spring.profiles.active=dev
spring.datasource.url=jdbc:oracle:thin:@ldap://xxx:389/risdev3, cn=OracleContext,dc=x,dc=net
spring.datasource.username=owner
spring.datasource.password=owner987
На основании следующих статей о подобной проблеме Spring boot - пользовательские переменные в Application.properties и Использование свойств конфигурации Spring-Boot в ваших собственных классах и Пример Spring Boot @ConfigurationProperties, я добавил эту аннотацию для своего класса @ConfigurationProperties(prefix = "spring")
(все свойства для подключения к базе данных имеют префикс "spring"). Однако, когда я запустил его с тестовым классом, как показано ниже, я получил ошибку «приложение должно предоставлять соединение JDBC», что означает, что свойства в application.properties не используются.
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = RistoreWebApplication.class, initializers = ConfigFileApplicationContextInitializer.class)
public class FmTrfUtilTest {
@Test
public void test() {
List<String> trfs = new ArrayList<String>();
trfs.add("TRF000001");
trfs.add("TRF000002");
int ret = FmTrfUtil.insertFmTrfs(trfs, "SARC");
assertTrue(ret > 0);
}
}
Чтобы @ConfigurationProperties
работала, я также добавил зависимость от maven spring-boot-configuration-processor
. Почему до сих пор не работает? Что я пропустил?