Togglz and spring boot actuator problem

169 views
Skip to first unread message

George L

unread,
Jul 19, 2024, 3:58:07 PM7/19/24
to togglz-users

I just recently added togglz to the spring-boot 3.1.9 application, which contains also much stuff like spring-security, spring-data, etc.

Maven dependency:

<dependency> 
 <groupId>org.togglz</groupId> 
 <artifactId>togglz-spring-boot-starter</artifactId>
 <version>4.4.0</version> 
</dependency>

Feature enum:

import org.togglz.core.Feature; 

public enum ApplicationFeatures implements Feature { 
 MY_FEATURE
 }

Configuration:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.togglz.core.manager.EnumBasedFeatureProvider; 
import org.togglz.core.spi.FeatureProvider; 
import org.togglz.core.user.NoOpUserProvider;
import org.togglz.core.user.UserProvider; 

@Configuration 
public class TogglesConfiguration { 

@Bean
public FeatureProvider featureProvider() {
return new EnumBasedFeatureProvider(ApplicationFeatures.class); 
 } 

@Bean public UserProvider userProvider() { return new NoOpUserProvider(); } }

Application.yaml:

togglz: 
   features: 
       MY_FEATURE:
             enabled: true

Simple service that uses:

import de.telekom.wom.workorder.config.toggles.ApplicationFeatures; 
import org.springframework.stereotype.Service;

@Service 
public class MyService { 
public String getA() { 
if (ApplicationFeatures.MY_FEATURE.isActive()) 
   return "OK";
else
   return "INACTIVE"
 }
 }

Simple spring boot test:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest//(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
class Testik { 

@Autowired
MyService myService; 

@Test 
void name() { 
 myService.getA(); 
 } 
}

The problem is that if I don't start real web environment, so use simple @SpringBootTest, I am getting an error:

java.lang.IllegalStateException: Could not find the FeatureManager. For web applications please verify that the TogglzFilter starts up correctly. In other deployment scenarios you will typically have to implement a FeatureManagerProvider as described in the 'Advanced Configuration' chapter of the documentation.

But if I add (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) , then it works.

Logs by success:

DEBUG [FeatureContext.findFeatureManagerInClassLoader()] Provider org.togglz.core.context.BeanFinderFeatureManagerProvider returned FeatureManager

Logs by error:

DEBUG [FeatureContext.findFeatureManagerInClassLoader()] No FeatureManager provided by org.togglz.core.context.BeanFinderFeatureManagerProvider

I realized that if I remove the actuator dependency from the pom.xml file, then everything works as it should. Any ideas why?

<dependency>
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>


Reply all
Reply to author
Forward
0 new messages