В документации MyBatis показан способ создания SqlSessionFactory
с помощью файла конфигурации XML или Configuration
объекта с помощью кода Java. В нем также упоминаются передаваемые свойства, которые будут переопределять то, что указано в файле XML.
Я пытаюсь использовать средство свойств для предоставления URL источника данных в дополнение к конфигурации XML, но свойство не устанавливается.
Вот XML-файл конфигурации, который я использую (для краткости удалены все псевдонимы и сопоставления):
<configuration>
<typeAliases>
<typeAlias alias="Item" type="com.example.project.Item"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:C:/path_to_db_file_in_the_filesystem"/>
<property name="username" value="sa"/>
<property name="password" value="sa"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/project/mappers/ItemMapper.xml"/>
</mappers>
</configuration>
XML-файл отлично работает для всех, но мне нужно предоставить url
через код Java (через код он получается из другого файла конфигурации, поэтому его необходимо динамически передавать в MyBatis). Я знаю, что могу делать все это в коде, но это будет ненужной работой, поэтому я хотел бы избежать этого пути, если это возможно.
На основании описания в руководстве я удалил строку url
из файла XML и получил следующий код:
String resource = "com/example/project/MyBatisConfiguration.xml";
Reader reader = Resources.getResourceAsReader(resource);
Properties props = new Properties();
props.setProperty("url", url);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader, props);
Код создает SqlSessionFactory
, но я получаю исключение "url не может быть пустым", указывающее, что свойство не было успешно перезаписано. Я думаю, что имя свойства должно быть в специальном формате, но я не смог выяснить, что это за формат.
Заранее большое спасибо за помощь.