powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Quartz+boot+JPA
15 сообщений из 15, страница 1 из 1
Quartz+boot+JPA
    #39482142
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собссно проблема, сделал вроде по мануалам, всё работает, всё вызывается, всё стартует. Но уже 2 часа голову ломаю - когда к жпа репозиторию обращаюсь - ругается, что нет сессии. т.е. сейшн контекст в параллельный поток не передается. Помню была похожая проблема со спринг.шедулером, и я ее как то решил, но не помню как.

вот конфиг кварза:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
@Configuration
public class SchedulerConfig {
  //  public static final String QUARTZ_PROPERTIES_PATH = "/quartz.properties";
    @Autowired
    PlatformTransactionManager transactionManager;
    @Autowired
    ApplicationContext applicationContext;

    @Bean
    public JobFactory jobFactory(ApplicationContext applicationContext) {
        AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
        jobFactory.setApplicationContext(applicationContext);
        return jobFactory;
    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) throws IOException {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setAutoStartup(true);
        factory.setJobFactory(jobFactory);
        factory.setQuartzProperties(quartzProperties());
        factory.setTransactionManager(transactionManager);
        factory.setApplicationContext(applicationContext);
        factory.setOverwriteExistingJobs(false);

        return factory;
    }

    @Bean
    public Properties quartzProperties() throws IOException {
        PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
       // propertiesFactoryBean.setLocation(new ClassPathResource(QUARTZ_PROPERTIES_PATH));
        propertiesFactoryBean.afterPropertiesSet();
        return propertiesFactoryBean.getObject();
    }
}



аппконтекст передается, платформтранзактманагер тоже не пустой.

а любой вызов валится с ошибкой жпа.

я так понимаю, что то в конфиге не добавил, верно?
Есть конечно вариант - внутри потока через персистансконтекст обращаться к жпа репозиториям, но это очень плохая идея.
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482166
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
я так понимаю, что то в конфиге не добавил, верно?
Есть конечно вариант - внутри потока через персистансконтекст обращаться к жпа репозиториям, но это очень плохая идея.

Обычно это разруливает EntityManagerFactory если следовать общим рекомендациям по спрингу.

Вот гляньте мой код здесь
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482167
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergunkaandreykaTя так понимаю, что то в конфиге не добавил, верно?
Есть конечно вариант - внутри потока через персистансконтекст обращаться к жпа репозиториям, но это очень плохая идея.

Обычно это разруливает EntityManagerFactory если следовать общим рекомендациям по спрингу.

Вот гляньте мой код здесь

Глюканул сквл пишу дальше

https://github.com/SVyatkin/predix-rdbr-cf/blob/master/src/main/java/com/ge/predix/labs/data/jpa/config/ServicesConfiguration.java

здесь у меня несколько побольше сервисов, но идея примерна таже.

Там через PersistenceContext все должно работать на чих-пых.

Код: java
1.
2.
    @PersistenceContext
    private EntityManager em;



https://github.com/SVyatkin/predix-rdbr-cf/blob/master/src/main/java/com/ge/predix/labs/data/jpa/service/VisitService.java
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482171
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTЕсть конечно вариант https://stackoverflow.com/a/18698497
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482178
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergunkaГлюканул сквл пишу дальше

https://github.com/SVyatkin/predix-rdbr-cf/blob/master/src/main/java/com/ge/predix/labs/data/jpa/config/ServicesConfiguration.java

здесь у меня несколько побольше сервисов, но идея примерна таже.


Зачем так сложно?!

1) Подключаем spring-data-jpa + нужный JDBC-driver
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>



2) В main/resources/application.properties (application.yaml) - прописываем подключение к БД
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
spring:
  data:
    rest:
      base-path: /dao
  h2:
    console:
      enabled: true
  jpa:
    show-sql: true


3) Описываем все entity

4) В конфигурации пишем @EnableJpaRepositories с указанием где будет репозиторий
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"kz.astonline.test.dao.repository"})
public class MainDAO {

    public static void main(String... args) {
        SpringApplication.run(MainDAO.class, args);
    }
}



5) В пакете-репозитории создаем интерфейсы с аннотацией @Repository, наследники JpaRepository<Entity, TypePK>
Код: java
1.
2.
3.
4.
@Repository
public interface IPersonRepository extends JpaRepository<PersonEntity, Long>, JpaSpecificationExecutor<PersonEntity> {

}


...
6) POFIT
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482222
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTя так понимаю, что то в конфиге не добавил, верно?
Выглядит вполне нормально. У меня очень похожий конфиг, с одной лишь разницей, что вместо JobFactory я в спринге конфигурирую CronTriggerFactoryBean + MethodInvokingJobDetailFactoryBean. Я бы подебажил спринги. Может там не в сессии дело, а в том что вызов бина не перехватывается спрингом в принципе и поэтому не создаётся контекст для потока?
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482231
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело в том, что не пашет только то что связано с jpa, остальные бины, связи инжекты и т.п. - без проблем. не передается только персистенз контекст. у меня было нечто похожее с многопоточкой спринга, но там вроде как решил просто использованием другого екзекутора. и оно само заработало.
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482232
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мад Нацгул, да, у меня именно так через репо и сделано всё.
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482233
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul6) POFIT
ПОФИГ у тебя до тех пор пока потоки не начнут появляться "изнеоткуда".
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482234
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTне передается только персистенз контекст
Как определили?

andreykaT. у меня было нечто похожее с многопоточкой спринга, но там вроде как решил просто использованием другого екзекутора. и оно само заработало.
В stacktrace исключения присутствуют все нужные спринговые интерцепторы?
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482236
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну как определил.. вызываю сервисы, которые внутри себя имеют мешок зависимостей от других бинов. и всё работает.

по стэктрэйсу сказать пока не могу - надо посмотреть. я не на работе..
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482239
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTну как определил.. вызываю сервисы, которые внутри себя имеют мешок зависимостей от других бинов. и всё работает.
Если в другом месте что-то работает, это ещё не значит что в том месте где не работает проблема в том что "не передаётся контекст". Она может быть и в чем-то другом. Поэтому мне и интересно, откуда такие точные выводы при таком скупом описании проблемы.
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482463
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTМад Нацгул, да, у меня именно так через репо и сделано всё.

Тогда тебе не нужна прямая ссылка на контекст.
Да и EntityManager не особо нужен.

Если нужен не стандартный запрос, то
В репозитории ч/з @Query

Если что-то совсем не стандартное.
То делаете что-то подобное:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Component
public class SomeRepository {

    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
...
Тут какие-то метды 
...
}
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482782
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, разобрался. я. ложная тревога. всем спасибо.
вкратце, конфиг сверху верный. все контексты вроде как передаются. всё ок.

проблема была в следующем: чуть ранее заказчик попросил фичу которая впиливает некоторые секурити плюшки на уровень персистанза, т.е. сделал перхватчик симплджпарепозитория и модифицировал стандартные методы и переданные спецификации. не спрашивайте зачем - не мое желание.

что собссно я и впилил, данные в переписанном репозитории считвались с секурити контекста, который, естественно в потоке квартца был пустым. я забил контекст админскими кредами (в рамках своего приложения) - и всё заработало.

единственное, что мне пока не очень понятно - мой код когда получал нулёвый секурити контекст - кидал соответствующий эксепшн с описанием. в случае когда этот контекст кидал ексепшн из под потока созданного кварцем ексепшен кидался:
а) другой
б) рандомно. :) изредка кидал мой эксепшн. что меня и натолкнуло на это дело.
но это уже другая тема.

такие дела.
...
Рейтинг: 0 / 0
Quartz+boot+JPA
    #39482872
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanandreykaTЕсть конечно вариант https://stackoverflow.com/a/18698497

Очень классная ссылка. Спасибо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Quartz+boot+JPA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]