У меня вопрос о конфигурации контекста в Tomcat 8. Я переношу проект с Tomcat 7 на 8 и имею необычную проблему: если ничего не изменилось в конфигурации, я обнаружил ошибку:
"2015-02-03 12:05:48,310 FIRST_ADMIN ERROR web.context.ContextLoader:331
-> Context initialization failed org.springframework.jmx.export.UnableToRegisterMBeanException:
Unable to register MBean [[email protected]]
with key 'dataSource'; nested exception is
javax.management.InstanceAlreadyExistsException:
Catalina:type=DataSource,host=localhost,context=/first-
admin,class=javax.sql.DataSource,name="jdbc/datasource/first"
Часть контекста:
<Resource name="jdbc/datasource/first"
auth="Container"
type="javax.sql.DataSource"
poolPreparedStatements="true"
initialSize="25"
maxActive="100"
maxIdle="100"
minIdle="25"
username="us"
password="pa"
driverClassName="com.mysql.jdbc.Driver"
validationQuery="select 1"
testOnBorrow="true"
url="jdbc:mysql://localhost:3306/firstproject?useUnicode=true&characterEncoding=UTF-8&profileSQL=false&autoSlowLog=false&slowQueryThresholdMillis=100&autoReconnect=true"/>
Итак, он работает в tomcat 7 без проблем. В Tomcat 8 я могу решить эту проблему двумя способами:
- Добавляя к ресурсу:
singleton = "false";
- Добавляя к ресурсу:
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
Если я ясно понимаю, что tomcat создает источник данных для моего приложения и для jmx, но в Tomcat 7 это был единственный объект, в Tomcat 8 он должен быть другим. Поэтому мой вопрос: почему эта ситуация произошла? Я не мог найти информацию об этом изменении документации. И мне интересно, что лучше: создать одиночный источник данных (я так думаю) или создать несколько с помощью factory.