Giriş
Şu satırı dahil ederiz
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; import org.springframework.boot.actuate.endpoint.annotation.Selector;
Açıklaması şöyle
Following are the steps to create a new endpoint.
- Create a new class. This class should be annotated with @Endpoint annotation.
- Provide an id attribute to this annotation. This will be the id of the endpoint or the name with which it will be accessed.
- Create a method in this class. This method should have @ReadOperation annotation.
- When the endpoint is accessed, the method with @ReadOperation will be invoked. Thus, this method should return the data that you want to send when the endpoint is accessed.
- Finally, this class should be a spring bean so it is annotated with @Component annotation.
- Register this endpoint id in application.properties to enable it as shown below.management.endpoints.web.exposure.include = info,env,health,getusers
1. @Endpoint olarak işaretli sınıfı bir bean kodlanır.
2. Bu bean içinde
- GET isteği için @ReadOperation,
- POST isteği için @WriteOperation,
- DELETE isteği için @DeleteOperation
olarak işaretli metodlar olabilir. Metodlar parametre alabilirler
3. Bu bean application.properties dosyasında Spring'e tanıtılır.
Örnek
Şöyle yaparız. "http://localhost:8080/actuator" adresindeki listede "helloworld" isimli bir endpoint görebiliriz.
application.properties dosyasına şöyle yaparız@Configurationpublic class CustomActuatorConfiguration {@Beanpublic HelloWorldEndpoint helloWorldEndpoint() {return new HelloWorldEndpoint();}}@Endpoint(id = "helloworld")public class HelloWorldEndpoint {@ReadOperationpublic String helloWorld() {return "Hello World";}}
management.endpoints.web.exposure.include=helloworldSonucu görmek için şöyle yaparız
> curl 'http://localhost:8080/actuator/helloworld'
Hello World
Örnek
Şöyle yaparız
@Component
@Endpoint(id="getusers")
public class LoggedInUserFinder {
List<User> users = new ArrayList<>();
@ReadOperation
public List<User> getUsers() {
User userOne = new User();
userOne.setName("Mark Twain");
User userTwo = new User();
userTwo.setName("Robinhood");
users.add(userOne);
users.add(userTwo);
return users;
}
@ReadOperation
public User getUser(@Selector String userName) {
// return user matching name
for (User user : users) {
if(user.getName().equals(userName)) {
return user;
}
}
return new User();
}
@DeleteOperation
public User removeUser(@Selector String userName) {
// remove user matching name
for (User user : users) {
if(user.getName().equals(userName)) {
users.remove(user);
return user;
}
}
return new User();
}
@WriteOperation
public User removeUser(@Selector String userName) {
// create user with name
User user = new User();
// add user
users.add(user);
}
// User model class
static class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}application.properties dosyasına şöyle yaparız
management.endpoints.web.exposure.include = info,env,health,getusershttp://localhost:8080/actuator/getusers adresine gidersek çıktı şöyle
[
{"name":"Mark Twain"},
{"name":"Robinhood"}
]
Hiç yorum yok:
Yorum Gönder