Ответы пользователя по тегу Java
  • Пытаюсь подключиться к postgresql 16 через docker-compose, использую spring-boot 3.2.4, что не так?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.

    java.net.UnknownHostException: db


    Попробуйте добавить оба контейнера в одну сеть.

    version: "3"
    
    services:
    
      app:
        build:
          context: .
          dockerfile: app.Dockerfile
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/javacode
          - SPRING_DATASOURCE_USERNAME=postgres
          - SPRING_DATASOURCE_PASSWORD=postgres
        ports:
          - "8080:8080"
        networks:
          app:
    #    command: ["./wait-for-it.sh", "db:5432", "java", "-jar", "/app/app.war"]
    
      db:
        build:
          context: .
          dockerfile: postgreSQL.Dockerfile
        container_name: db
        environment:
          POSTGRES_DB: javacode
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
        ports:
          - "5432:5432"
        volumes:
          - ./db/initDB.sql:/docker-entrypoint-initdb.d/initDB.sql
        networks:
          app:
    
    networks:
      app:
        driver: bridge
    Ответ написан
  • Как правильно вывести подблок с данными на странице?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Можно по-разному реализовать.
    1) Заранее подготовить некий DTО, в котором заранее будут данные пользователя и его отпуски. Соответственно, останется просто итерировать по этому List<DTO>
    2) Если идти, по структуре, как сейчас, то есть персональные данные и данные об отпусках добавляются во вью отдельно, то нужно сделать проверку на ID пользователя.
    Условно говоря, th:if="${el.Trackable_ID == el.PERSON_ID}"
    Я просто не знаю, как ваши поля называются. Т.е. взять ID текущего элемента из trackables и сравнить его с ID человека в deviationsTrackables
    Ответ написан
    Комментировать
  • Каким образом формировать graphql запрос из кода (java, spring) используя dsl решения?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вот, похожий вопрос и соответственно, ответ -
    https://stackoverflow.com/questions/73472972/in-sp...
    Ответ написан
    Комментировать
  • Реализовать вывод результата поиска, с выбором среди результатов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Если вы решили реализовать полнотекстовой поиск, то такие библиотеки, как Hibernate Search, ElasticSearch, Apache Lucene вам в помощь.

    Теперь, что касается вашего функционала, то вот ошибка:
    "Error resolving template [autocomplete], template might not exist or might not be accessible".
    Он не видит шаблон autocomplete.

    Так как не вижу вашего кода, то сделаю смелое предположение, что класс в котором находится эндпоинт autocomplete аннотиирован @Controller
    И если uri - add_trackable возвращает ваш шаблон и корректно работает, то autocomplete не будет работать, так как вы выполняете ajax запрос. Тут 2 варианта - вынести этот эндпоинт в отдельный класс и обозначить, как @RestController . Или же к этому методу добавить @ResponseBody
    К слову, прочитайте про разница @Controller и @RestController
    Ответ написан
    Комментировать
  • Как правильно подключиться к двум ДБ?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вот, как это делаю я:
    1) yaml конфигурация
    spring:
      datasource:
        db_1:
          url: jdbc:postgresql://localhost:5432/DB_NAME
          jdbc-url: jdbc:postgresql://localhost:5432/DB_NAME
          username: username
          password: password
          driver-class-name: org.postgresql.Driver
          jpa:
            show-sql: true
            open-in-view: false
            generate-ddl: true
            database-platform: org.hibernate.dialect.PostgreSQL10Dialect
            properties:
              hibernate:
                format_sql: true
                order_inserts: true
                order_updates: true
                jdbc:
                  batch_size: 15
                globally_quoted_identifiers: true
                globally_quoted_identifiers_skip_column_definitions: true
                query:
                  plan_cache_max_size: 4096
                  #fail_on_pagination_over_collection_fetch: true
                  in_clause_parameter_padding: true
            hibernate:
              ddl-auto: update
        db_2:
          url: jdbc:postgresql://localhost:5432/DB_NAME_2
          jdbc-url: jdbc:postgresql://localhost:5432/DB_NAME_2
          username: username
          password: password
          driver-class-name: org.postgresql.Driver
          jpa:
            show-sql: true
            open-in-view: false
            generate-ddl: true
            database-platform: org.hibernate.dialect.PostgreSQL10Dialect
            properties:
              hibernate:
                format_sql: true
                order_inserts: true
                order_updates: true
                jdbc:
                  batch_size: 15
                globally_quoted_identifiers: true
                globally_quoted_identifiers_skip_column_definitions: true
                query:
                  plan_cache_max_size: 4096
                  #fail_on_pagination_over_collection_fetch: true
                  in_clause_parameter_padding: true
            hibernate:
              ddl-auto: update
      jackson:
        serialization:
          FAIL_ON_EMPTY_BEANS: false


    2) Java конфигурация для первой БД
    @Configuration
    @EnableTransactionManagement
    @RequiredArgsConstructor
    @EnableJpaRepositories(
            basePackages = {"com.example.db1.repository"},
            entityManagerFactoryRef = "db1EntityManagerFactory",
            transactionManagerRef = "db1EntityManagerFactory"
    
    )
    public class DB1JpaConfig {
    
        private final Environment env;
    
        @Bean
        @Primary
        @ConfigurationProperties("spring.datasource.db1")
        public DataSourceProperties db1DataSourceProperties() {
            return new DataSourceProperties();
        }
    
    
        @Bean(name = "db1DataSource")
        @Primary
        public DataSource db1DataSource() {
            return db1DataSourceProperties()
                    .initializeDataSourceBuilder()
                    .build();
        }
    
        @Bean(name = "db1EntityManagerFactory")
        @Primary
        public LocalContainerEntityManagerFactoryBean db1EntityManagerFactory(
                @Qualifier("db1DataSource") DataSource dataSource,
                EntityManagerFactoryBuilder builder) {
            HashMap<String, Object> properties = new HashMap<>();
            properties.putAll(hibernateProperties());
            properties.putAll(enversProperties());
    
            return builder
                    .dataSource(dataSource)
                    .properties(properties)
                    .packages("com.example.db1.model")
                    .build();
        }
    
        /**
         * Hibernate properties
         * @return Map of properties for Hibernate
         */
        private Map<String, Object> hibernateProperties() {
            HashMap<String, Object> properties = new HashMap<>();
            properties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.datasource.db1.jpa.hibernate.ddl-auto"));
            properties.put("hibernate.dialect", env.getProperty("spring.datasource.db1.jpa.database-platform"));
            properties.put("hibernate.globally_quoted_identifiers", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.globally_quoted_identifiers"));
            properties.put("hibernate.globally_quoted_identifiers_skip_column_definitions", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.globally_quoted_identifiers_skip_column_definitions"));
            properties.put("hibernate.default_schema", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.default_schema"));
            properties.put("hibernate.format_sql", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.format_sql"));
            properties.put("hibernate.show_sql", env.getProperty("spring.datasource.db1.jpa.show-sql"));
            properties.put("hibernate.order_inserts", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.order_inserts"));
            properties.put("hibernate.order_updates", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.order_updates"));
            properties.put("hibernate.jdbc.batch_size", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.jdbc.batch_size"));
            properties.put("spring.jpa.open-in-view", env.getProperty("spring.datasource.db1.jpa.open-in-view"));
            properties.put("spring.jpa.generate-ddl", env.getProperty("spring.datasource.db1.jpa.generate-ddl"));
            return properties;
        }
    
    
    
        @Bean(name = "db1EntityManagerFactory")
        @Primary
        public PlatformTransactionManager db1EntityManagerFactory(
                @Qualifier("db1EntityManagerFactory") LocalContainerEntityManagerFactoryBean db1EntityManagerFactory) {
            return new JpaTransactionManager(Objects.requireNonNull(db1EntityManagerFactory.getObject()));
        }
    }


    Java конфигурация для 2-й БД (аналогична первому практически)
    @Configuration
    @EnableTransactionManagement
    @RequiredArgsConstructor
    @EnableJpaRepositories(
            basePackages = {"com.example.db2.repository"},
            entityManagerFactoryRef = "db2EntityManagerFactory",
            transactionManagerRef = "db2EntityManagerFactory"
    
    )
    public class DB2JpaConfig {
    
        private final Environment env;
    
        @Bean
        @Primary
        @ConfigurationProperties("spring.datasource.db2")
        public DataSourceProperties db2DataSourceProperties() {
            return new DataSourceProperties();
        }
    
    
        @Bean(name = "db2DataSource")
        @Primary
        public DataSource db2DataSource() {
            return db2DataSourceProperties()
                    .initializeDataSourceBuilder()
                    .build();
        }
    
        @Bean(name = "db2EntityManagerFactory")
        @Primary
        public LocalContainerEntityManagerFactoryBean db2EntityManagerFactory(
                @Qualifier("db2DataSource") DataSource dataSource,
                EntityManagerFactoryBuilder builder) {
            HashMap<String, Object> properties = new HashMap<>();
            properties.putAll(hibernateProperties());
            properties.putAll(enversProperties());
    
            return builder
                    .dataSource(dataSource)
                    .properties(properties)
                    .packages("com.example.db2.model")
                    .build();
        }
    
        /**
         * Hibernate properties
         * @return Map of properties for Hibernate
         */
        private Map<String, Object> hibernateProperties() {
            HashMap<String, Object> properties = new HashMap<>();
            properties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.datasource.db2.jpa.hibernate.ddl-auto"));
            properties.put("hibernate.dialect", env.getProperty("spring.datasource.db2.jpa.database-platform"));
            properties.put("hibernate.globally_quoted_identifiers", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.globally_quoted_identifiers"));
            properties.put("hibernate.globally_quoted_identifiers_skip_column_definitions", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.globally_quoted_identifiers_skip_column_definitions"));
            properties.put("hibernate.default_schema", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.default_schema"));
            properties.put("hibernate.format_sql", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.format_sql"));
            properties.put("hibernate.show_sql", env.getProperty("spring.datasource.db2.jpa.show-sql"));
            properties.put("hibernate.order_inserts", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.order_inserts"));
            properties.put("hibernate.order_updates", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.order_updates"));
            properties.put("hibernate.jdbc.batch_size", env.getProperty("spring.datasource.db2.jpa.properties.hibernate.jdbc.batch_size"));
            properties.put("spring.jpa.open-in-view", env.getProperty("spring.datasource.db2.jpa.open-in-view"));
            properties.put("spring.jpa.generate-ddl", env.getProperty("spring.datasource.db2.jpa.generate-ddl"));
            return properties;
        }
    
    
    
        @Bean(name = "db2EntityManagerFactory")
        @Primary
        public PlatformTransactionManager db2EntityManagerFactory(
                @Qualifier("db2EntityManagerFactory") LocalContainerEntityManagerFactoryBean db2EntityManagerFactory) {
            return new JpaTransactionManager(Objects.requireNonNull(db2EntityManagerFactory.getObject()));
        }
    }


    Когда делаете запрос к БД используйте эту аннотацию:
    import org.springframework.transaction.annotation.Transactional;


    Для первой БД (например, на уровне сервиса):
    @Transactional(transactionManager = "db1TransactionManager")


    или для второй БД

    @Transactional(transactionManager = "db2TransactionManager")
    Ответ написан
    Комментировать
  • Как обеспечить корректность изменения статусов для записей?

    azerphoenix
    @azerphoenix Автор вопроса, куратор тега Java
    Java Software Engineer
    Хоть Camunda и является хорошим решением, но на данный момент мы остановились на Spring Statemachine.
    Ответ написан
    Комментировать
  • Что нужно для правильного выполнения команды Java -server?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Could not find or load main class ..libs.auth-0.0.1.jar

    такая проблема еще бывает, если у файла permissions не хватает.

    Попробуйте что-то типа
    chmod +x xxx.jar (название jar файла)
    Ответ написан
  • Как заменить все ссылки в тексте?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если я вас правильно понимаю, то вы можете использовать jsoup
    Откройте документ, выберите все a[href] замените на нужные, сохраните документ
    https://stackoverflow.com/questions/21529602/jsoup...
    Ответ написан
    1 комментарий
  • Не получается запустить .sh на ubuntu server что делать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Очень сильно подозреваю, что проблема в chmod.
    Попробуйте выставить на jar - chmod +x ***.jar
    Ответ написан
    Комментировать
  • Как можно найти последовательность методов, которые были применены к Java объекту?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если я правильно понимаю, то вас нужен трейсинг
    https://github.com/btraceio/btrace
    Вот, тут еще есть интересная статья - https://copyprogramming.com/howto/how-to-log-trace...

    Вот, еще по теме - https://stackoverflow.com/questions/1069066/how-ca...

    Вот, средствами самой java - https://www.baeldung.com/java-get-current-stack-trace
    Ответ написан
    1 комментарий
  • Как часто используется Spring Security? Стоит ли его учить джуну?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Неважно, как именно вы реализуете авторизацию. Spring Security нужно владеть и подключать к проекту.
    Возможно, как джун или интерн вам необязательно знать все об этом фреймворке, то некий базовый минимум все-таки придется изучить
    Ответ написан
    Комментировать
  • Есть сервера, которые стоит написать именно на Java, а не на Node?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Многое зависит от ваших умений и знаний, а также от задачи, которую нужно решить..

    Если вы владеете лучше нодой, то пишите на ноде. Другое дело, сможет ли нода решить задачу, которую вам нужно решить. На java написано куча библиотек, которые решают множество повседневных задач. Сам язык и его фреймворки используются в highload cистемах в энтерпрайз.

    Я широко использую язык Java для повседневных задач, но также иногда предпочитаю использовать Go.
    Ответ написан
    Комментировать
  • Как избежать Out Of Memory Error?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Может, Webflux + tus? При наличии tus не страшен Out Of Memory Error, ибо потом можно будет докачать.
    Ответ написан
    Комментировать
  • Как правильно собрать артифакт?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Для сборки артефакта используйте соответствующие плагины от maven или gradle.
    Если в проекте есть зависимости, то погуглите такой термин, как fat jar.
    maven build fat jar
    gradle build fat jar
    Ответ написан
    Комментировать
  • Как сохранить данные в PostgreSQL в Spring Data JDBC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Да, можно каскадно. Можно выставить CascadeType.ALL или как вариант выбрать только MERGE & PERSIST
    Ответ написан
    Комментировать
  • Есть ли пример расширяемого приложения на базе Spring для клиентов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вам по факту нужен базовый функционал + возможность установки плагинов.
    Благо у спринга есть готовый фреймворк
    https://github.com/spring-projects/spring-plugin
    Ответ написан
    Комментировать
  • Как использовать конкретную версию Джава?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Для удобства я использую sdkman.
    https://sdkman.io/
    В частности для временного использования указанной версии `sdk use java xxx` и для постоянного использования `sdk set java xxx`
    Ответ написан
    Комментировать
  • Какой пет проект можно реализовать на Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    В связи с этим вопрос: а что на Java можно такое реализовать, чтобы охватывало много разных технологий?

    Нуу, напишите сервис колл-центра или какой-нибудь онлайн чат. Можно также написать что-нибудь на микросервисах. Можно взять понравившийся вам сайт и скопировать его функционал. Можно принять участие в опенсорс проектах, как вариант
    Ответ написан
    Комментировать
  • Какую книгу взять новичку в разработке микросервисов на Spring Framework?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если хотите быстро войти в курс дела, то можете глянуть курсы на Udemy.
    Например, у Сергея Каргополова есть курс по микросервисам на английском. А так разумеется, что для академических знаний книга не помещает.

    `Java в Облаке Джоша Лонга` не рекомендую. Это скорее даже рекламная книжка компании Pivotal, нежели что-то академическое.

    Микросервисы spring в действии. можно прочитать
    Ответ написан
    2 комментария
  • Hibernate не видит entity. Как пофиксить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый вечер.
    А кто пропишет в файл конфигурации, что этот класс является entity?)

    Обратите внимание на эту строку -
    <mapping class="hibernate.entity.User"/>

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="connection.url">jdbc:mysql://localhost:3306/spring_course</property>
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.username">root</property>
            <property name="connection.password">springcourse</property>
            <property name="current_session_context_class">thread</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="show_sql">true</property>
           
             <mapping class="hibernate.entity.User"/>
        </session-factory>
    </hibernate-configuration>
    Ответ написан