#java #spring #spring-boot #request-mapping #ff4j
#java #весна #spring-boot #запрос-сопоставление #ff4j
Вопрос:
При интеграции FF4j
в мое приложение у меня возникла очередь проблем. Его интегрировали, наконец, следуя рекомендации. Краткое описание рекомендации:
- Удалите автоматическую настройку thymeleaf;
- Добавьте старую версию thymeleaf 2.1.4.RELEASE, которая используется ff4j-web
- Напишите класс конфигурации, например FF4JWebConfiguration:
@Configuration @ConditionalOnClass({ConsoleServlet.class, FF4jDispatcherServlet.class}) @AutoConfigureAfter(FF4JConfiguration.class) public class FF4JWebConfiguration extends SpringBootServletInitializer { @Bean public ServletRegistrationBean servletRegistrationBean(ConsoleServlet ff4jConsoleServlet) { return new ServletRegistrationBean(ff4jConsoleServlet, "/ff4j-console"); } @Bean @ConditionalOnMissingBean public ConsoleServlet getFF4jServlet(FF4j ff4j) { ConsoleServlet ff4jConsoleServlet = new ConsoleServlet(); ff4jConsoleServlet.setFf4j(ff4j); return ff4jConsoleServlet; } @Bean public ServletRegistrationBean ff4jDispatcherServletRegistrationBean(FF4jDispatcherServlet ff4jDispatcherServlet) { return new ServletRegistrationBean(ff4jDispatcherServlet, "/ff4j-web-console/*"); } @Bean @ConditionalOnMissingBean public FF4jDispatcherServlet getFF4jDispatcherServlet(FF4j ff4j) { FF4jDispatcherServlet ff4jConsoleServlet = new FF4jDispatcherServlet(); ff4jConsoleServlet.setFf4j(ff4j); return ff4jConsoleServlet; }
}
Упущенная деталь в рекомендации — исключение maven:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.4.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
</exclusions>
</dependency>
Но это не работает
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
14:11:33.605 ERROR o.s.b.SpringApplication - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
пока я не добавлю несколько приемов исключения maven
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.4.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
</exclusions>
</dependency>
мое приложение успешно запущено с поврежденным представлением из-за того, что некоторые данные не загружаются в пользовательский интерфейс:
13:38:14.785 INFO o.f.w.FF4jServlet - __ __ _ _ _
13:38:14.785 INFO o.f.w.FF4jServlet - / _|/ _| || | (_)
13:38:14.785 INFO o.f.w.FF4jServlet - | |_| |_| || |_| |
13:38:14.785 INFO o.f.w.FF4jServlet - | _| _|__ _| |
13:38:14.785 INFO o.f.w.FF4jServlet - |_| |_| |_|_/ |
13:38:14.786 INFO o.f.w.FF4jServlet - |__/ v1.8
13:38:14.786 INFO o.f.w.FF4jServlet -
13:38:14.832 INFO o.f.w.FF4jServlet - Thymeleaf has been initialized
13:38:14.887 INFO o.t.TemplateEngine - [THYMELEAF] INITIALIZING TEMPLATE ENGINE
13:38:14.971 INFO o.t.t.AbstractTemplateResolver - [THYMELEAF] INITIALIZING TEMPLATE RESOLVER: org.thymeleaf.templateresolver.ClassLoaderTemplateResolver
13:38:14.972 INFO o.t.t.AbstractTemplateResolver - [THYMELEAF] TEMPLATE RESOLVER INITIALIZED OK
13:38:14.980 INFO o.t.T.CONFIG - [THYMELEAF] TEMPLATE ENGINE CONFIGURATION:
[THYMELEAF] * Cache Factory implementation: org.thymeleaf.cache.StandardCacheManager
[THYMELEAF] * Template modes:
[THYMELEAF] * VALIDXML
[THYMELEAF] * XHTML
[THYMELEAF] * LEGACYHTML5
[THYMELEAF] * XML
[THYMELEAF] * VALIDXHTML
[THYMELEAF] * HTML5
[THYMELEAF] * Template resolvers (in order):
[THYMELEAF] * org.thymeleaf.templateresolver.ClassLoaderTemplateResolver
[THYMELEAF] * Message resolvers (in order):
[THYMELEAF] * [0] customMessageResolver
[THYMELEAF] * Dialect: org.thymeleaf.standard.StandardDialect
[THYMELEAF] * Prefix: "th"
[THYMELEAF] TEMPLATE ENGINE CONFIGURED OK
13:38:14.981 INFO o.t.TemplateEngine - [THYMELEAF] TEMPLATE ENGINE INITIALIZED
13:38:15.648 INFO o.a.c.c.C.[.[.[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
13:38:15.649 INFO o.s.w.s.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
13:38:15.713 INFO o.s.w.s.DispatcherServlet - Completed initialization in 64 ms
13:38:15.746 WARN o.s.w.s.PageNotFound - No mapping for GET /static/css/font-awesome-3.2.1.css
13:38:15.747 WARN o.s.w.s.PageNotFound - No mapping for GET /static/css/bootstrap.min.css
13:38:15.747 WARN o.s.w.s.PageNotFound - No mapping for GET /static/js/jquery/jquery-1.9.1.js
13:38:15.749 WARN o.s.w.s.PageNotFound - No mapping for GET /static/css/dashboard.css
13:38:15.749 WARN o.s.w.s.PageNotFound - No mapping for GET /static/css/style.css
13:38:15.750 WARN o.s.w.s.PageNotFound - No mapping for GET /static/css/bootstrap-responsive.min.css
13:38:15.972 WARN o.s.w.s.PageNotFound - No mapping for GET /static/js/base.js
13:38:15.973 WARN o.s.w.s.PageNotFound - No mapping for GET /static/js/bootstrap.js
13:38:15.981 WARN o.s.w.s.PageNotFound - No mapping for GET /static/img/ff4j.png
13:38:15.989 WARN o.s.w.s.PageNotFound - No mapping for GET /static/img/flags/flagEnglish.png
13:38:15.989 WARN o.s.w.s.PageNotFound - No mapping for GET /static/js/ff4j.js
13:38:16.016 WARN o.s.w.s.PageNotFound - No mapping for GET /static/img/flags/flagMexico.png
13:38:16.030 WARN o.s.w.s.PageNotFound - No mapping for GET /static/img/flags/flagFrance.png
13:38:16.031 WARN o.s.w.s.PageNotFound - No mapping for GET /static/img/flags/flagGermany.png
13:38:16.032 WARN o.s.w.s.PageNotFound - No mapping for GET /static/img/flags/flagJapanese.png
...
это можно исправить с помощью
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
Но сервлеты ff4j никак не работают в моем приложении:
WARN o.s.w.s.PageNotFound - No mapping for GET /features
Вопрос
Я обнаружил, что FF4jServlet
инициализированы и зарегистрированы все необходимые контроллеры, но я не понимаю, почему это не работает… Есть идеи, как это исправить?
Некоторые детали проекта:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<ff4j.version>1.8.0</ff4j.version>
Ответ №1:
Вы пробовали смотреть на
https://github.com/ff4j/ff4j-spring-boot-starter-parent/tree/master/ff4j-spring-boot-sample ?
Есть две консоли. К какой из них вы пытаетесь получить доступ?
Комментарии:
1. кажется, это работает. Но у меня нет возможности интегрировать это решение из-за версии snapshot. Сколько времени потребуется для выпуска предоставленного решения?
2. Я протестировал его с версией 1.8, и он работает нормально. Вы также можете попробовать это, заменив в ff4-spring-boot-sample pom.xml версия от snapshot до версии 1.8 (последняя версия).
3. версия 1.8 почти работает и для меня. Проблема с
http://localhost:5000/ff4j-web-console
навигацией и контроллерами. поэтому я не могу использовать его до тех пор, пока он не будет исправлен или выпущен 1.9.4. Используйте следующий URL
http://localhost:5000/ff4j-web-console/
-адрес, завершите его отсутствующей косой/
чертой.5. Релиз запланирован на 11 мая 2019 года.