Получение данных из application.properties

297
21 января 2022, 17:40

Пишу небольшое приложение по работе, и надо создать класс для использования его в RestController Но дело в том, что я никак не могу получить данные из файла application.properties. Пробовал разные способы, которые советовали в интернете, ничего не помогает

Вот код класса, что я создал

package com.example.demo;
import com.sas.cas.*;
import com.sas.cas.actions.Castable;
import com.sas.cas.actions.sessionProp.SetSessOptOptions;
import com.sas.cas.actions.table.FetchOptions;
import com.sas.cas.events.CASAuthenticatedUserEventListener;
import com.sas.cas.events.CASSSLSocketEventListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.Socket;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
@Component
public class CASRepository {
    //Параметры клиента CAS
    //String host = "sasserver.demo.sas.com";
    //int port = 5570;
    //String username = "sasdemo";
    //String password = "Orion123";
    // boolean disablessl = true;
    //String table = "demo";
    //String vars = "air,date";
    final CASClient client = new CASClient();
    @Value("${client.host}")
    private String host;
    @Value("${client.port}")
    int port;
    @Value("${client.username}")
    String username;
    @Value("${client.password}")
    String password;
    @Value("${client.table}")
    String table;
    @Value("${client.vars}")
    String vars;
    @Value("${client.caslib}")
    String caslib;
    @Value("${client.disablessl}")
    boolean disablessl;
    public CASRepository() {
        System.out.print(host);
        //Создание клиента CAS
        client.setHost(host);
        client.setPort(port);
        client.setUserName(username);
        client.setPassword(password);
        // client.setSessionID(sessionID);
        //client.setNumberOfNodes(1);
        //Устанавливаем caslib для текущей сессии CAS
        try {
            SetSessOptOptions options = new SetSessOptOptions();
            options.clear();
            options.setCaslib(caslib);
            client.invoke(options);
        } catch (CASException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //Создаем UserEventListener
        client.setAuthenticatedUserEventListener(new CASAuthenticatedUserEventListener() {
            @Override
            public void handleAuthenticatedUserEvent(CASAuthenticatedUserInfo userInfo) {
                System.out.println("client.getHost() = " + client.getHost());
                System.out.println("client.getPort() = " + client.getPort());
                System.out.println("userInfo.getUsername() = " + userInfo.getUsername());
            }
        });

        //Если отключаем проверку протокола SSL и у нас еще нет EventListener, то создаем его
        if (disablessl && (client.getSSLSocketEventListener() == null)) {
            client.setSSLSocketEventListener(new CASSSLSocketEventListener() {
                @Override
                public void handleSocketConnectionEvent(CASClientInterface client, Socket socket) {
                }
                @Override
                public void handleSocketClosedEvent(CASClientInterface client, Socket socket) {
                }
                @Override
                public SSLSocketFactory handleSSLSocketCreationEvent(CASClientInterface client, Socket socket) throws IOException {
                    SSLSocketFactory sf = null;
                    // Trust all!
                    TrustManager[] trustAllCerts = new TrustManager[]{
                            new X509TrustManager() {
                                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                                    return new X509Certificate[0];
                                }
                                public void checkClientTrusted(
                                        java.security.cert.X509Certificate[] certs, String authType) {
                                }
                                public void checkServerTrusted(
                                        java.security.cert.X509Certificate[] certs, String authType) {
                                }
                            }
                    };
                    // Install the all-trusting trust manager
                    try {
                        SSLContext sc = SSLContext.getInstance("SSL");
                        sc.init(null, trustAllCerts, new java.security.SecureRandom());
                        sf = sc.getSocketFactory();
                    } catch (Exception ex) {
                        throw new IOException(ex);
                    }
                    return sf;
                }
            });
        }
    }
    //Get the whole table
    public List<row> gettable() throws IOException, CASException {
        //создаем настройки выборки
        FetchOptions opt = new FetchOptions();
        Castable tble = new Castable();
        tble.setName(table);
        String[] vrs = getStringArrayProperty(vars);
        if (vrs != null) {
            tble.setParameter(Castable.KEY_VARS, vrs);
        }
        opt.setTable(tble);
        opt.setSasTypes(false);
        //выбираем данные
        CASActionResults<CASValue> results = client.invoke(opt);
        return dumpByRow((CASTable) results.getResult(0).getValue());
    }
    private String[] getStringArrayProperty(String vrs) {
        String[] sa = null;
        String s = vrs;
        if (s != null) {
            sa = s.split(",");
        }
        return sa;
    }
    private List<row> dumpByRow(CASTable t) throws IOException {
        int n = Math.min(100, t.getRowCount());
        List<row> list = new ArrayList<>();
        row buffer = new row();
        for(int row = 0; row<n; row++){
            buffer.setFirst(t.getStringAt(row, 0));
            buffer.setSecond(t.getStringAt(row, 1));
            list.add(buffer);
        }
        return list;
    }
    //Change row in the table
}
Answer 1

вы обращаетесь к полям из конструктора, поэтому они еще не заполнены спрингом, либо воспользуйтесь аннотацией @PostConstruct:

@PostConstruct
public void init(){
  //Создание клиента CAS
  ...
}

либо, используйте @Value на параметрах конструктора

public CASRepository(@Value("${client.host}") String host ...) {
Answer 2

Можно так

@Autowired
private Environment env;
...
env.getProperty("name");
....
READ ALSO
Расположение файлов в Maven проекте

Расположение файлов в Maven проекте

В Maven-проект необходимо добавить txt файл, из которого программа будет считывать данныеГде мне следует его хранить: в src/main/resources или создать...

145
Можно ли с помощью Arrays.sort(…) отсортировать массив &#171;наших&#187; объектов?

Можно ли с помощью Arrays.sort(…) отсортировать массив «наших» объектов?

Столкнулся с таким вот вопросом из списка на подготовку к собеседованию на junior java и не могу раздуплиться никак

94
Как присвоить значение переменной из файла. А переменная - object

Как присвоить значение переменной из файла. А переменная - object

Мне нужно допустим перекачать объект класса Example в файл и потом из файла его восстановить и присвоить обратно

155
Как реализовать переключение блоков с помощью css?

Как реализовать переключение блоков с помощью css?

В шаблоне имеется 3 блока и снизу справа стрелочки

205