powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Не получается поднять бота на Spring Boot
233 сообщений из 233, показаны все 10 страниц
Не получается поднять бота на Spring Boot
    #39966855
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую! Хотел переписать своего телеграм бота, написанного на чистой Java, на новый лад с использованием Spring. Для начала решил попробовать написать простейшего бота, который просто отвечает "Hello"! Нашел подходящую библиотеку: https://github.com/rubenlagus/TelegramBots/tree/master/telegrambots-spring-boot-starter

Пошёл настраивать xml, получилось так:
Код: xml
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.
    <dependencies>
        <dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots-spring-boot-starter</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.3.0.RELEASE</version>
        </dependency>
    </dependencies>


Возможно, нахватал лишних зависимостей, так как Spring я только начинаю осваивать, подсмотрел в каком-то проекте на гитхабе.

Создаю главный класс:
Код: java
1.
2.
3.
4.
5.
6.
7.
@SpringBootApplication
public class TelegramBotApplication {
    public static void main(String[] args) {
        ApiContextInitializer.init();
        SpringApplication.run(LibraryTelegramBot.class, args);
    }
}


И класс бота:
Код: 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.
@Component
public class LibraryTelegramBot extends TelegramLongPollingBot {

    private static final String TOKEN = "...";

    private static final String USERNAME = "...";

    public void onUpdateReceived(Update update) {
        if (update.hasMessage() && update.getMessage().hasText()){
            final long chat_id = update.getMessage().getChatId();
            sendTextMessage(chat_id, "Привет!");
        }
    }

    public String getBotUsername() {
        return USERNAME;
    }

    public String getBotToken() {
        return TOKEN;
    }

     private synchronized void sendTextMessage(long chat_id, String message) {
        SendMessage sendMessage = new SendMessage();
        sendMessage.enableMarkdown(false)
                .setChatId(chat_id)
                .setText(message);
        try {
            execute(sendMessage);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
}


Далее запускаю, в консоли получаю следующий лог:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
2020-06-07 13:07:43.518  INFO 3288 --- [main] bot.TelegramBotApplication: Starting TelegramBotApplication on ROMA with PID 3288 (started by РОМА in C:\Users\РОМА\IdeaProjects\gp_parser_telegrambot_spring)
2020-06-07 13:07:43.529  INFO 3288 --- [main] bot.TelegramBotApplication: No active profile set, falling back to default profiles: default
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/C:/Users/%d0%a0%d0%9e%d0%9c%d0%90/.m2/repository/com/google/inject/guice/4.2.2/guice-4.2.2.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-06-07 13:07:45.709  INFO 3288 --- [main] bot.TelegramBotApplication: Started TelegramBotApplication in 3.669872541 seconds (JVM running for 5.238)


После этого бот падает, приложение останавливается, никаких дополнительных ошибок или сообщений нет. Он просто перестает работать, не успев начать.
WARNING - классические для бота, написанный не на спринге бот выплевывает их таким же образом, но это не мешает ему работать.
Пробовал и с VPN - не помогло. Не знаю, куда копать.

Возможно, проблема тут: No active profile set, falling back to default profiles: default
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39966881
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какую же глупую ошибку я обнаружил спустя 3 часа.
Неверный класс указываю для
Код: java
1.
SpringApplication.run(LibraryTelegramBot.class, args);


В этом и была проблема.
Хотя мне изначально казалось, что мне необходимо передавать в аргументы тот класс, который наследуется от LongPollingBot. А нужен тот, где init().
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39966921
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот прекрасный пример бота под Хероку на этой библиотеке:
https://github.com/INFINITE-TECHNOLOGY/DAVID
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967511
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напишите хоть полезного бота. Типа там... ProbeiNomera или ProbeiTelefon. А если нету - то предложить
юзеру и внести инфу. Будет такая себе самонаполняющаяся базка.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967524
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79, я тебя умоляю. Тогда все соц-сети надо закрыть. Там же личной инфы столько скольку угрозыску не снилось.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967539
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подобные базы уже создаются. По крайней мере для Андроид приложений что-то есть.

А с государством на его территории конечно я в кошки-мышки играть не буду. Это не моё.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967552
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вчера я в перерывах между анализом китайского AWS-кода и чтением спек слушал вот этого перца.

YouTube Video
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967557
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Термин - "работать на дядю" мне непонятен.

Поясни что ты понимаешь под этим.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967559
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, это такой эффемизм вопроса: "Ты капиталист или пролетарий?"
Стандартный ответом может быть: "Мелкобуржуазный пролетарий"
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967567
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стартапа точно нет.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967601
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работа.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967615
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжаю мучаться, пыхтеть и пробовать. Возникла проблема следующего рода.
В общем, если я размещаю всю логику в классе, который наследуется от LongPolling:
Код: java
1.
2.
@Component
public class GooglePlayAssistantBot extends TelegramLongPollingBot


то, мой бот прекрасно работает и по определенным запросам сохраняет информацию в базу данных. По другому запросу забирает информацию из БД и возвращает пользователю.

Стоить мне всё вынести в отдельный класс (обработку Update), и бот не может достать информацию из БД - он возвращает всегда null.

Есть репа для обращения к БД:
Код: java
1.
2.
3.
public interface GamesRepository extends CrudRepository<GooglePlayGame, Long> {
   Game findByTitle (String title);
}


Есть сам класс-сущность, которую добавляю в БД (с геттерами/сеттерами/конструкторами):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Entity
@Table(name = "GAMES")
public class Game {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String title;
....



В главный класс внедряю репу:
Код: java
1.
2.
@Autowired
    private GamesRepository repository;



Ну сохраняю и достаю примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public void saveGame(Game game) {
    repository.save(game);
}

public Game get(String title){
    GooglePlayGame game = repository.findByTitle(title);
    return game;
}


Так всё работает. Бот отвечает на запросы и корректно добавляет/забирает в/из БД.
Пробую перенести все эти методы в другой класс:
Код: java
1.
2.
3.
4.
5.
6.
@Component
public class UpdatesReceiver {
    public void handleUpdate(Update update){
        //та же логика
    }
}


И при попытке сохранить в БД или достать из нее, я получаю NPE. Ошибки о том, что я не могу подключиться к БД, я не получаю. Таблица в БД на месте. Да и не знаю, как проверить, подключается ли он вообще к БД. При этом обычные команды работают, если не обращаться к БД.
Где я свернул не туда?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дружище. NPE происходит в конкретной строке. В стектрейсе видно. Подсвети ее в твоих сорцах.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967619
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Дружище. NPE происходит в конкретной строке. В стектрейсе видно. Подсвети ее в твоих сорцах.

Я понимаю что в конкретной (лог забыл приложить), я сисаутами заплевал консоль и все корректно, до момента обращения к репозиторию.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
2020-06-09 22:48:53.680 ERROR 7100 --- [legram Executor] Telegram Bots Api                        : BOTSESSION

java.lang.NullPointerException: null
	at ru.miroha.bot.service.UpdatesReceiver.get(UpdatesReceiver.java:65) ~[classes/:na]
	at ru.miroha.bot.service.UpdatesReceiver.handleUpdate(UpdatesReceiver.java:31) ~[classes/:na]
	at ru.miroha.bot.service.GooglePlayAssistantBot.onUpdateReceived(GooglePlayAssistantBot.java:26) ~[classes/:na]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) ~[na:na]
	at org.telegram.telegrambots.meta.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27) ~[telegrambots-meta-4.1.2.jar:na]
	at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:305) ~[telegrambots-4.1.2.jar:na]


Т.е. при попытке достать игру из БД падает тут:
Код: java
1.
Game game = repository.findByTitle(title);


При попытке сохранить в БД падает тут:
Код: java
1.
repository.save(game);


Т.е. при заходе в два метода, которые работают с БД через репу.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967623
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое главный класс?

Вот эта штука предположительно не инициализировалась.

Код: java
1.
2.
@Autowired
    private GamesRepository repository;
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967625
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Что такое главный класс?

Вот эта штука предположительно не инициализировалась.

Код: java
1.
2.
@Autowired
    private GamesRepository repository;


Здесь у меня главный тот, который наследуется от LongPolling и получает апдейты, т.е. вот этот:
Код: java
1.
2.
@Component
public class GooglePlayAssistantBot extends TelegramLongPollingBot



Да, скорее всего репозиторий не инициализируется. Выходит спринг не может внедрить зависимость из-за того, что я через new создаю объект класса UpdatesReceiver и вызываю на нем метод.
Код: java
1.
2.
3.
4.
@Override
    public void onUpdateReceived(Update update) {
        new UpdatesReceiver().handleUpdate(update);
}
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967627
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сложно понять по этим огрызкам что из себя представляет твоё приложение.

Попробуй так

Код: java
1.
2.
3.
4.
    @Autowired
    public GamesRepository repository() {
          return new GamesRepository();
    }



Или так

Код: java
1.
GamesRepository repository = context.getBean(GamesRepository.class);
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967632
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Получилось так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Component
public class GooglePlayAssistantBot extends TelegramLongPollingBot {

 
    @Autowired
    private UpdatesReceiver updatesReceiver;

    @Override
    public void onUpdateReceived(Update update) {
        updatesReceiver.handleUpdate(update);
    }


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Component
public class UpdatesReceiver {

    @Autowired
    private GamesRepository repository;

    public void handleUpdate(Update update){
        //та же логика
}



Я создавал UpdatesReceiver, которому переадресую Update и, в котором обращаюсь далее к репе, через new.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39967818
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
репозиторий нужно пометить анотацией репозиторий
@Repository
тогда @Autowired будет работать


Можно и не помечать.
Можно в конфигурационном классе указать где лежать интерфейсы репозитория.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@EnableJpaRepositories(
        basePackages = {"com.foo.repository"},
        entityManagerFactoryRef = "entityManagerFactoryBean",
        transactionManagerRef = "JpaTransactionManager"

)
@Configuration
public class MyCoolConfig {
}



:-)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968035
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zzz79
mad_nazgul
пропущено...


Можно и не помечать.
Можно в конфигурационном классе указать где лежать интерфейсы репозитория.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@EnableJpaRepositories(
        basePackages = {"com.foo.repository"},
        entityManagerFactoryRef = "entityManagerFactoryBean",
        transactionManagerRef = "JpaTransactionManager"

)
@Configuration
public class MyCoolConfig {
}



:-)


я думаю для проекта автора это будет overhead ,достаточно простой анотации чтобы инициализация прошла успешно

Вполне, но узнать что-то новое и попробовать это, всегда полезно :)

Возник вопрос про контроллер. Как я могу его "красиво" использовать без веб составляющей? У меня нет url и соответсвующих маппингов, типа такого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Controller
public class Controller {
@GetMapping("/main")
    public String main(Model model){
        Iterable<Message> messages = messageRepository.findAll();
        model.addAttribute("messages", messages);
        return "main";
    }
}


Я глубоко ещё не копал про контроллер и маппинги, но тут условно при запросе url с /main на конце я попаду в этот метод и верну соответсвующую модель.

А если рассмотреть мой проект, у меня есть условно этот UpdatesReceiver. Могу я к нему добавить маппинги, но чтобы маппинг связывался с сообщением пользователя?
Т.е. примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
@GetMapping("привет")
public String main(Model model){
   return hello();
}
public void hello(){
   System.out.println("Привет!")
}
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968040
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Странного" захотелось?

Что такое "сообщение " в твоём проекте? JMS?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968045
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Обычное пользовательское сообщение в чат, которое приходит от телеграм бота.
Просто репозиторий есть, модель есть, а контроллера нет, вот я и подумал, что и его тоже как-нибудь надо реализовать.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968071
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
mayton,
Обычное пользовательское сообщение в чат, которое приходит от телеграм бота.
Просто репозиторий есть, модель есть, а контроллера нет, вот я и подумал, что и его тоже как-нибудь надо реализовать.

Смотри. Я могу просто подсказать тебе фреймворк который в декларативном
стиле (тыже хочешь декларативности) роутит сообщения. Любого типа. И не обязательно примитивы.

Фреймворк называется Apache Camel https://camel.apache.org/docs/
Это - вершина MQ-процессинга. Если тебе нужно построить свой Crew Dragon на месседжах
то бери его не прогадаешь.

В нем есть примерно 2 approaches для достижения такой конфигурации. Один с использованием XML routes.
Другой с динамическими роутами которые можно как-то на Java кодить. Мы использовали только первый
вариант. Вот конфигурация для твоего случая. У тебя "Привет" должен быть свойством объекта-месседжа.

https://camel.apache.org/components/latest/eips/message-router.html

Но это все красиво летает реально при очень большом проекте с сложной бизнес-логикой
и я не уверен что здесь телеграмный бот подходит.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968082
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Я вот еще вариант нашел, как раз того, чего я примерно хотел.
https://habr.com/ru/post/335490/

Только сложновато для меня, а тупо копипастить не хочу.
Наверное, проще убрать вообще контроллер и сделать обычную обработку в обычном java коде без привязки к MVC архитектуре.
Но сущность (model) оставлю, как и репозиторий. Вот такой вот обрубок MV без C получится. :)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968110
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть 2 задачи. Первое - это сделать бота. И второе - сделать бота "странным образом".

Я-бы на твоем месте просто делал бота. В этом есть какая-то философская идея а также
следование принципам KISS/YAGNI.

Согласен?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968143
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мой пример вы смотрели? Там уже многопоточность и асинхронность сделана.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968214
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Вот есть 2 задачи. Первое - это сделать бота. И второе - сделать бота "странным образом".

Я-бы на твоем месте просто делал бота. В этом есть какая-то философская идея а также
следование принципам KISS/YAGNI.

Согласен?

У меня есть бот, и он работает на чистой Java. И работает так, как нужно. Проблема возникла в том, что у меня информация пишется в json файл, а heroku рестартит бота каждые 24 часа, и этот json файл каждый день обновляется. Я хотел перенести всё это дело в БД. А возиться с JDBC не особо хочется, поэтому выбрал удобную модель "сущность для БД - репозиторий для работы с БД". Да и банально Spring хотелось пощупать.

dakeiras
мой пример вы смотрели? Там уже многопоточность и асинхронность сделана.

Да моему боту многопоточность не нужна. Он же для каждого юзера запрос обрабатывает отдельно, по очереди. Коллизии при использовании данных не будет. Вопрос только во времени ожидания. Тестировал на 4 аккаунтах сразу, отправлял запрос одновеменно на парсинг - ответ пришел в течение секунды, что вполне меня устраивает. Если бот в будущем "найдет себе жизнь", то можно будет подумать об этом, а пока это лишнее. Тем более там в код груви замешан и прочитать и понять его сходу у меня не получилось.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968254
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha

У меня есть бот, и он работает на чистой Java. И работает так, как нужно. Проблема возникла в том, что у меня информация пишется в json файл, а heroku рестартит бота каждые 24 часа, и этот json файл каждый день обновляется. Я хотел перенести всё это дело в БД. А возиться с JDBC не особо хочется, поэтому выбрал удобную модель "сущность для БД - репозиторий для работы с БД". Да и банально Spring хотелось пощупать.


Не смотря на то что я люблю Spring, но мне кажется проще заморочиться с JDBC, чем пытаться изучить Spring.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968258
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgul
miroooha

У меня есть бот, и он работает на чистой Java. И работает так, как нужно. Проблема возникла в том, что у меня информация пишется в json файл, а heroku рестартит бота каждые 24 часа, и этот json файл каждый день обновляется. Я хотел перенести всё это дело в БД. А возиться с JDBC не особо хочется, поэтому выбрал удобную модель "сущность для БД - репозиторий для работы с БД". Да и банально Spring хотелось пощупать.


Не смотря на то что я люблю Spring, но мне кажется проще заморочиться с JDBC, чем пытаться изучить Spring.

Ну мне не имея опыта работы для будущего собеседования будет полезнее изучить Spring, чем JDBC. :)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968265
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Будет плохо, если я оставлю сущность/модель (объект с информацией об игре), которую используя spring будут сохранять в БД при парсинге и репозиторий для обращения к БД, опустив контроллер? Как на такой код посмотрит будущий работодатель, который будет смотреть мои проекты?

Я хочу изучить Spring не из-за того, что я с него тащусь, а из-за того что даже на джуниорских вакансиях в 80% случаев требуют (либо желательно) знание спринга. А там еще Hibernate где-то рядом :)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968281
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
mad_nazgul
пропущено...


Не смотря на то что я люблю Spring, но мне кажется проще заморочиться с JDBC, чем пытаться изучить Spring.

Ну мне не имея опыта работы для будущего собеседования будет полезнее изучить Spring, чем JDBC. :)

Желательно соскочить с хероку на нормальный хостинг.

А то ... какой-то замкнутый круг получится.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968284
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
miroooha
пропущено...

Ну мне не имея опыта работы для будущего собеседования будет полезнее изучить Spring, чем JDBC. :)

Желательно соскочить с хероку на нормальный хостинг.

А то ... какой-то замкнутый круг получится.

Да, heroku конечно ограничивает возможную функциональность, но с другой стороны за "бесплатно" он работает хорошо.
А какие хостинги можете посоветовать?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968286
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты из РФ - то смотри местные. Они должны быть недороги.

У AWS можно купить EC2 instance. Например t2.micro (1Gb/1CPU/SSD). Любой линукс себе закажешь.
Насчет биллинга я не скажу. Я поднимал себе инстансы только для экспериментов. Что-то попробовать там.
Поднял. Часик пороаботал. И потушил. Более дешевый вариант - Docker. Он же ECS. Но на своём акке
я докеры еще не поднимал.

В некотором гипотетическом сценарии Телеграм бота можно попробовать поднять как Lambda. Но я тут
не уверен хватит ли возможностей. Если только Stateless прокатит.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968308
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
mayton
пропущено...

Желательно соскочить с хероку на нормальный хостинг.

А то ... какой-то замкнутый круг получится.

Да, heroku конечно ограничивает возможную функциональность, но с другой стороны за "бесплатно" он работает хорошо.
А какие хостинги можете посоветовать?


Heroku хорошь тем что поднял и забыл. Никаких инфраструктурных головняков.

А советовать поднимать докер=шабашить SRE на полставки у самого себя :)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968327
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топике по моему звучали жалобы на то что дескыть файлы
не сохраняет и вообще state после ребута нигде не хранится.

Вобщем ребята если просто хотите расти над собой и развиваться - то выбрасывайте бесплатные песочницы.

Это знаете... как летать бизнес-классом и экономом. В экономе просидишь всю жизнь с синдромом бедности.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968382
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha,
>А какие хостинги можете посоветовать?
За 300-500 руб в месяц тебе не дорого?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968387
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Например t2.micro (1Gb/1CPU/SSD)

В течение года бесплатно. Потом можно поменять кридитную карточку и зарегестрировать новую.

Но 1 Gb на Java + Web - сейчас уже маловато ((( С дефолтными настройками JVM даже не запустится (Metaspace и non heap нужно зарезать по максимому)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968404
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Год бесплатно? У меня был только 1 месяц бесплатно.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968406
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В топике по моему звучали жалобы на то что дескыть файлы
не сохраняет и вообще state после ребута нигде не хранится.

Вобщем ребята если просто хотите расти над собой и развиваться - то выбрасывайте бесплатные песочницы.

Это знаете... как летать бизнес-классом и экономом. В экономе просидишь всю жизнь с синдромом бедности.

мой зоопарк в хероку обходится в килобакс в месяц :)
И оно того стоит.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968409
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоесть ты хочешь чтобы мы термин "зоопарк" попытались натянуть на какое-то понимание бизнеса?

Вроде как и похвастался. И в то-же время деталей не раскрыл. Ай хитёр.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968416
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тоесть ты хочешь чтобы мы термин "зоопарк" попытались натянуть на какое-то понимание бизнеса?

Вроде как и похвастался. И в то-же время деталей не раскрыл. Ай хитёр.


Да уже рассказывал тут по отдельности... Весь этот стэк для нескольких заказчиков.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968419
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну моё мнение по Бобину ты знаешь ....

Тот факт что оно у тебя работает я связываю с твоим энергичным "продвижением" этой ненужной dependency
а также с забыванием прекрасной философии YAGNI.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968424
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я кстати активно поработал над проектами последние недели на основе комментарием отсюда.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968453
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
Будет плохо, если я оставлю сущность/модель (объект с информацией об игре), которую используя spring будут сохранять в БД при парсинге и репозиторий для обращения к БД, опустив контроллер? Как на такой код посмотрит будущий работодатель, который будет смотреть мои проекты?


Тогда желательно начать изучения Spring не с Spring Data Jpa, а с Spring core и реализации DI в нем.
Т.е. пойти на spring.io и попробовать несколько примеров.
Чем пытаться выудит информацию из форумов.

miroooha

Я хочу изучить Spring не из-за того, что я с него тащусь, а из-за того что даже на джуниорских вакансиях в 80% случаев требуют (либо желательно) знание спринга. А там еще Hibernate где-то рядом :)


Hibernate это вообще «Чу́дище о́бло, озо́рно, огро́мно, стозе́вно и ла́яй».
С кем я сталкивался никто его не знает полностью.
Я тоже не знаю полностью Hibernate.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968475
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

Hibernate это вообще «Чу́дище о́бло, озо́рно, огро́мно, стозе́вно и ла́яй».
С кем я сталкивался никто его не знает полностью.
Я тоже не знаю полностью Hibernate.

Его "замели веником" под ковёр SpringData. Но это до тех пор пока у вас все хорошо.
Как только полезет Hiber-специфичная бага - вы увидите стектрейсы хибера во всей
красе. И тогда надо будет снова брать документацию и читать с нуля. Включать
режим трейса для хибер пакетов.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968478
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

Hibernate это вообще «Чу́дище о́бло, озо́рно, огро́мно, стозе́вно и ла́яй»
Нет никаких сомнений, что хибернейт - это УГ, но вы даже себе представить не можете какое УГ eclipselink...
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968482
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов, а вы не побовали Oracle TopLink?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968483
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hibernate это автоматизация работы с SQL, не более того.
Там знать особо нечего и не нужно себе голову забивать. Всё равно всё нужно тестировать на конкретных БД.

То что работает в Postgres может очень легко не работать в MSSQL - и не по вине hibernate.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968516
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
mad_nazgul

Hibernate это вообще «Чу́дище о́бло, озо́рно, огро́мно, стозе́вно и ла́яй».
С кем я сталкивался никто его не знает полностью.
Я тоже не знаю полностью Hibernate.

Его "замели веником" под ковёр SpringData. Но это до тех пор пока у вас все хорошо.
Как только полезет Hiber-специфичная бага - вы увидите стектрейсы хибера во всей
красе. И тогда надо будет снова брать документацию и читать с нуля. Включать
режим трейса для хибер пакетов.


Вот полностью с вами согласен.
Но тут работает правило 20/80.
Грубо говоря в подавляющем большинстве случаев хватает Spring Data Jpa.
А вот когда не хватает... То тогда да. Начинается ужас.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968518
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
mad_nazgul

Hibernate это вообще «Чу́дище о́бло, озо́рно, огро́мно, стозе́вно и ла́яй»
Нет никаких сомнений, что хибернейт - это УГ, но вы даже себе представить не можете какое УГ eclipselink...


Я бы не сказал, что Хибернейт УГ.
Просто он сложный, очень сложный.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968523
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
Hibernate это автоматизация работы с SQL, не более того.


Вот не надо верить маркетинговым бредням.
Это не автоматизация Object-Relational Mapping.
Грубо говоря Попытка отобразить РМД на объекты.


dakeiras

Там знать особо нечего и не нужно себе голову забивать. Всё равно всё нужно тестировать на конкретных БД.


Зачем, когда можно все сделать через нативные SQL-запросы и RowMapping в JDBCTemplate?
Это и проще, и быстрее. ;-)

dakeiras

То что работает в Postgres может очень легко не работать в MSSQL - и не по вине hibernate.


А может и работать, при этом модель может быть совсем не тривиальная.
Хибернейт уже давно может генерировать SQL запросы в зависимости от используемой БД.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968527
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это всё понятно. OLAP на ORM никак не сделать :)

А что-то несложное но с непонятной инфраструктурой - велкам JPA. Потом приятно смотреть как ПМы удивляются - как так не займёт времени переезд на другую БД?

авторА может и работать, при этом модель может быть совсем не тривиальная.
Хибернейт уже давно может генерировать SQL запросы в зависимости от используемой БД.
Значит оно скорее всего изначально мигрировалось с JDBC/писалось под MSSQL.
Но я не отрицаю, всё зависит от задачи.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968528
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Андрей Панфилов
пропущено...
Нет никаких сомнений, что хибернейт - это УГ, но вы даже себе представить не можете какое УГ eclipselink...


Я бы не сказал, что Хибернейт УГ.
Просто он сложный, очень сложный.


Пользователям незачем знать его внутренности совершенно.
А когда появляется такая надобность - как Вы сказали надо спрыгивать на нативный SQL.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968531
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Андрей Панфилов
пропущено...
Нет никаких сомнений, что хибернейт - это УГ, но вы даже себе представить не можете какое УГ eclipselink...


Я бы не сказал, что Хибернейт УГ.
Просто он сложный, очень сложный.

Я-бы сказал что цели и задачи которые ставились Хибером были достигнуты.
Но это не серебрянная пуля. А бронзовая. И многие разработчики восприняли
эту идею как некий рафинированный рай, где они могут заниматься Java-кодингом
и ничего не знать про архитктуру реляционной БД. Странная позиция. Тем более
что если разраб хочет расти как архитектор то он должен знать весь стек целиком.
И не быть Java-идеалистом. Любая перформанная проблема моментально выдёргивает
тебя из этого рая. А решать перформансные проблемы все равно надо. Это судьба
любой системы. Она всегда хороша на тестовых данных. А на продуктовых - всё плохо.
Всё лагает. Все требует тонкого тюнинга.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968533
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ-бы сказал что цели и задачи которые ставились Хибером были достигнуты.
Но это не серебрянная пуля. А бронзовая. И многие разработчики восприняли
эту идею как некий рафинированный рай, где они могут заниматься Java-кодингом
и ничего не знать про архитктуру реляционной БД. Странная позиция. Тем более
что если разраб хочет расти как архитектор то он должен знать весь стек целиком.
И не быть Java-идеалистом. Любая перформанная проблема моментально выдёргивает
тебя из этого рая. А решать перформансные проблемы все равно надо. Это судьба
любой системы. Она всегда хороша на тестовых данных. А на продуктовых - всё плохо.
Всё лагает. Все требует тонкого тюнинга.

Я более того скажу - SQL это основа основ. Я работал Java программистом только 3 месяца в 2006 году (кстати на прошлой неделе внезапно снова попал в отдел разработки на Яве).
Потом работал программитстом только на PL/SQL, довольно много лет.

Так вот могу сказать - у людей без SQL бэкграунда есть страшная боязнь SQL. Как буд-то это монстр какой-то.
И они всячески изворачиваются чтобы не использовать его - придумывают разные no sql/mongodb, hadoop big data и прочее.
Ну и насилуют JPA.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968541
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras


Так вот могу сказать - у людей без SQL бэкграунда есть страшная боязнь SQL. Как буд-то это монстр какой-то.

Да, это правда.

dakeiras

И они всячески изворачиваются чтобы не использовать его - придумывают разные no sql/mongodb, hadoop big data и прочее.
Ну и насилуют JPA.

А вот это уже твои фантазии, все эти инструменты заточены под определенные юскейсы и прекрасно с ними справляются, там где реляционки не вывозят. И самое интересное тот же bigdata тоже в основном использует sql, но ключевое - не реляционный
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968543
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NoSQL стар как само время. Просто терминологически его стали выделять в категорию в середине 2000х.

BerkeleyDb стар, и все старые файло-подобные "БД на файлах" и либы которые писались в 20м
веке - это по сути NoSQL.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968544
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
тот же bigdata

термин интересный, но что это значит, я например не понимаю

Как было в свое время сказано в подфоруме работа, про работу в российской компании которая гордилась, что у нее самая большая СУБД в Европе: "сделать самую большую СУБД в Европе - много ума не надо" ( C )

На одном из предыдущих проектов наблюдал, как в процессе миграции из старой системы в новую, табличка из пары гигабайт элегантным движением... превращается... табличка превращается... почти в террабайт информации )))
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968545
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, один мой знакомый архитектор говаривал:

- Естественным образом? ...А ну это как раковая опухоль. Она - всегда растет естественно.

Мне кажется что иногда железный стек сам по себе подкидывает новые техно-категории. Например.
Как только подешевел мегабайт - стали строить датацентры где хранилища стоили как грязь.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968583
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Я-бы сказал что цели и задачи которые ставились Хибером были достигнуты.
Но это не серебрянная пуля. А бронзовая. И многие разработчики восприняли
эту идею как некий рафинированный рай, где они могут заниматься Java-кодингом
и ничего не знать про архитктуру реляционной БД. Странная позиция. Тем более
что если разраб хочет расти как архитектор то он должен знать весь стек целиком.
И не быть Java-идеалистом. Любая перформанная проблема моментально выдёргивает
тебя из этого рая. А решать перформансные проблемы все равно надо. Это судьба
любой системы. Она всегда хороша на тестовых данных. А на продуктовых - всё плохо.
Всё лагает. Все требует тонкого тюнинга.


Прошу прощения, но я тут с вами не согласен.
Цели Хибернейтом не были достигнуты.
Цель - отображение РМД на ООМ.
Когда модели простые, то все ок - работает. И даже просто.
Но как только модель становиться сложной, то начинается попытка натянуть сову на глобус.
С закономерным результатом.
И тут либо надо разбираться в потрохах Хибернейта, чтобы угадать, какие запросы будут созданы.
Либо плюнуть и использовать SQL + Jdbc.

При этом для простых моделей, для Хибернейта приходиться писать много бойлерплайт кода.
Эту проблему решает Spring Data Jpa.
Который позволяет не писать кучу не относящегося к БЛ кода.
А позволяет в декларативном стиле обратиться к БД.

Но в силу того, что Spring Data Jpa не SQL, то данный инструмент очень сильно ограничен.
И не позволяет использовать все возможности SQL.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968587
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

Я более того скажу - SQL это основа основ. Я работал Java программистом только 3 месяца в 2006 году (кстати на прошлой неделе внезапно снова попал в отдел разработки на Яве).
Потом работал программитстом только на PL/SQL, довольно много лет.

Так вот могу сказать - у людей без SQL бэкграунда есть страшная боязнь SQL. Как буд-то это монстр какой-то.
И они всячески изворачиваются чтобы не использовать его - придумывают разные no sql/mongodb, hadoop big data и прочее.
Ну и насилуют JPA.


Вот тоже самое могу сказать про "базистов".
Которые привыкли думать в парадигме РМД.
В то время, как сейчас существуют другие способы работы с данными.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968591
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
NoSQL стар как само время. Просто терминологически его стали выделять в категорию в середине 2000х.

BerkeleyDb стар, и все старые файло-подобные "БД на файлах" и либы которые писались в 20м
веке - это по сути NoSQL.


Не совсем. Просто на данной спирали развития СУБД (без Р), предлагаются другие способы решения проблем согласованности и не противоречивости данных.
Для ортодоксальных "базистов" они выглядят, как "ересь".
Кстати сейчас БД как двигаются в сторону NoSQL.
Но проблема, в том, что получается "ну так себе"
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968593
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
забыл ник
тот же bigdata

термин интересный, но что это значит, я например не понимаю

Как было в свое время сказано в подфоруме работа, про работу в российской компании которая гордилась, что у нее самая большая СУБД в Европе: "сделать самую большую СУБД в Европе - много ума не надо" ( C )

На одном из предыдущих проектов наблюдал, как в процессе миграции из старой системы в новую, табличка из пары гигабайт элегантным движением... превращается... табличка превращается... почти в террабайт информации )))


BigData это когда не хватает денег на лицензии Oracle. :-)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968600
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
BigData это когда не хватает денег на лицензии Oracle. :-)

Нет. Бигдата не решает Оракловых проблем. Это больше про аналитику и события в прошлом.

Я где-то в форуме поднатужился и изобрёл свое определение Bigdata. Могу найти.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968602
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

Прошу прощения, но я тут с вами не согласен.
Цели Хибернейтом не были достигнуты.
Цель - отображение РМД на ООМ.
Когда модели простые, то все ок - работает. И даже просто.
Но как только модель становиться сложной, то начинается попытка натянуть сову на глобус.
С закономерным результатом.
И тут либо надо разбираться в потрохах Хибернейта, чтобы угадать, какие запросы будут созданы.
Либо плюнуть и использовать SQL + Jdbc.

Я думаю что цели все таки достигнуты. Ведь формально вы Сегодня можете создавать БД не от SQL скриптов
а от Hibernate опций auto.ddl=create

Насколько глубоко эта модель будет использовать ВОЗМОЖНОСТИ БД как то партишенинг, хранимки, триггеры
- это большой вопрос. Но ведь и стандарт SQL тоже не урегулировал этот вопрос до конца. Язык хранимок Оракла
и Постгреса несовместим хотя и похож.

Кроме того если вы знаете более правильный или идеальный ОРМ - попробуйте его найти среди множества других.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968612
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Я думаю что цели все таки достигнуты. Ведь формально вы Сегодня можете создавать БД не от SQL скриптов
а от Hibernate опций auto.ddl=create

Насколько глубоко эта модель будет использовать ВОЗМОЖНОСТИ БД как то партишенинг, хранимки, триггеры
- это большой вопрос. Но ведь и стандарт SQL тоже не урегулировал этот вопрос до конца. Язык хранимок Оракла
и Постгреса несовместим хотя и похож.


Даже формально нет.
Т.к. не решает задачи формального перевода одной модели в другую.
И дело тут не в триггерах и пр., а в моделях.

mayton

Кроме того если вы знаете более правильный или идеальный ОРМ - попробуйте его найти среди множества других.


Идеального ORM нет и не будет.

Ограничение фундаментальное.

РМД все таки основывается на вполне понятной и строгой математической модели.
Есть понятные правила/алгоритмы построения модели, что позволило создать хороший декларативный ЯП SQL.

А вот с ООМ ситуация мутная.
Каждая модель уникальна. И нет понятных "правил/алгоритмов" по которым строятся эти модели.

Поэтому для сложных ООМ лучше писать свой "проебразователь" в РМД.
Причем может так оказаться, что разные ООМ могут быть представлены в виде одной РМД и наоборот.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968613
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
mayton

Я думаю что цели все таки достигнуты. Ведь формально вы Сегодня можете создавать БД не от SQL скриптов
а от Hibernate опций auto.ddl=create

Насколько глубоко эта модель будет использовать ВОЗМОЖНОСТИ БД как то партишенинг, хранимки, триггеры
- это большой вопрос. Но ведь и стандарт SQL тоже не урегулировал этот вопрос до конца. Язык хранимок Оракла
и Постгреса несовместим хотя и похож.


Даже формально нет.
Т.к. не решает задачи формального перевода одной модели в другую.
И дело тут не в триггерах и пр., а в моделях.

Ты чуть-чуть меня недоубедил. Не хватает примера.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968615
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

РМД все таки основывается на вполне понятной и строгой математической модели.
Есть понятные правила/алгоритмы построения модели, что позволило создать хороший декларативный ЯП SQL.

А вот с ООМ ситуация мутная.
Каждая модель уникальна. И нет понятных "правил/алгоритмов" по которым строятся эти модели.

Поэтому для сложных ООМ лучше писать свой "проебразователь" в РМД.
Причем может так оказаться, что разные ООМ могут быть представлены в виде одной РМД и наоборот.

Кажется есть обобщенный термин Object-relational impedance mismatch целые статьи ему посвящаются.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968620
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто само понятие объект - искусственное и натянутое в рамках программирование. Ну и когда берут мусор на вход то получается и мусор на выходев виде ОРМ, который решает надуманную проблему
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968623
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О нет! Только давай сейчас не трогать ООП. Там - еще хуже.

В РА есть хотя-бы алгебра множеств. И есть декларативные (доказуемые) свойства соединений.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968625
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
О нет! Только давай сейчас не трогать ООП. Там - еще хуже.

В РА есть хотя-бы алгебра множеств. И есть декларативные (доказуемые) свойства соединений.


Так я про то и говорю, что нету никакого object-relational mismatch, есть проблема в том что много кто моделирует приложение в виде объектов
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968637
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Ну смотри. Проблема то не в том что Хибернейт не совершенен. Он - полируется много лет и туда уже
просто НЕЧЕГО ДОБАВИТЬ как в том анекдоте.

А в том что сама идея ORM - не формализована нигде. Нет научной работы которая бы показывала
что маппинг должен быть таким и вот доказательство (как Пуанкаре).

И поэтому мы в топике даже не можем спорить т.к. нет судейства.

P.S. А хибер в своём сегменте - вполне себе завершонное ПО. Хотя и мне не нравится лично.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968645
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
доказательство ущербности мировоззрения среднестатистического пользователя ORM на stackoverflow:

https://stackoverflow.com/a/5819631/6784237

Просто вчитайтесь. Нигилизм во всей красе.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968646
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
доказательство ущербности мировоззрения среднестатистического пользователя ORM на stackoverflow:

https://stackoverflow.com/a/5819631/6784237

Просто вчитайтесь. Нигилизм во всей красе.


вкратце переведу: человек утверждает что использовать предикату в inner join (JPQL "join fetch") - неправильно, а надо фильтровать в Ява коде уже коллекцию.

Это просто меня убивает если честно.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968647
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Criteria API вообще должен был умереть.

Я пожалуй вижу единственный его смысл - генерация динамики в SQL. Но обычно эта фича
легко закрывалась прикладными билдерами SQL которые люди сами для себя пишут и их
решение всегда компактне чем Criteria.

А я туда еще хинты Оракла добавлял.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968717
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторлегкий хибернейт?)) ну мб в рамках дефолт репозиториев и методов findById

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

Вот примеры, всё примитивно и удобно, Хибернейт помогает в таких случаях:
https://github.com/INFINITE-TECHNOLOGY/ASCEND/tree/master/ascend-sdk/src/main/groovy/io/infinite/ascend/granting/configuration/repositories
https://github.com/INFINITE-TECHNOLOGY/ASCEND/tree/master/ascend-sdk/src/main/groovy/io/infinite/ascend/common/repositories
https://github.com/INFINITE-TECHNOLOGY/PIGEON/tree/master/pigeon-lib/src/main/groovy/io/infinite/pigeon/repositories

авторхероку хорош для пет проектов- неужели ты его юзаешь под прод коммерческих проектов?
а почему нет? Всё отлично. Единственный минус: дорого.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968747
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
dakeiras
доказательство ущербности мировоззрения среднестатистического пользователя ORM на stackoverflow:

https://stackoverflow.com/a/5819631/6784237

Просто вчитайтесь. Нигилизм во всей красе.


вкратце переведу: человек утверждает что использовать предикату в inner join (JPQL "join fetch") - неправильно, а надо фильтровать в Ява коде уже коллекцию.

Это просто меня убивает если честно.


Где именно в том топике на SO вы прочли именно это ? Там довольно прозрачно написано, что JOIN FETCH - это projection и применять к нему условия (т.е. использовать его в selection ) совершенно не разумно (выучите-таки SQL за который так топите), более того, в JPA подразумевается что при работе с объектной моделью ассоциативные связи бывают только в двух состояниях: "заполнены полностью" и "мы к ним еще не обращались и не знаем что там", такой концепции, что в зависимости от "контекста" ассоциативная связь ведет себя по разному, в JPA нет и быть не может, потому что оно не имеет никакого смысла: противоречивость модели - это полная жопа с точки зрения разработки, если вам действительно требуется контекст в таком смысле, то нужно делать слой над моделью, а не писать дичь в духе:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    @Query("""select a from PrototypeAuthorization a
        join fetch a.scopes s
        where s.name = :scopeName
        and a.serverNamespace = :serverNamespace""")
    Set<PrototypeAuthorization> inquire(
            @Param("scopeName") String scopeName,
            @Param("serverNamespace") String serverNamespace
    )



Вы думаете, что JPA вам обязано упрощать написание запросов, это во-первых, нифига не так, во-вторых, надо хоть иногда включать мозг прежде чем пороть хрень: в вашем случае достаточно было ввести явную связь типа PrototypeAuthorizationScope с M2O на PrototypeAuthorization и Scope и обращаться к этой связи, а не писать чушь.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968771
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторболее того, в JPA подразумевается что при работе с объектной моделью ассоциативные связи бывают только в двух состояниях: "заполнены полностью" и "мы к ним еще не обращались и не знаем что там
я именно об этом и говорю. Это неправильный подход.

Объясню почему:
- Это колечит весь дизайн т.к.
1) ограничивается размер коллекций - иначе без join предикат план запроса будет делать hash join вместо nested loops. И база будет вставать раком.
2) из-за п.1 придётся отказываться от логических зависимостей
3) появляются извращения как Вы ниже предложили (явные промежуточные сущности)
4) в итоге переписываем у себя в коде жалкое подобие того что могло быть сделано элементарно стандартными средствами SQL

авторв вашем случае достаточно было ввести явную связь типа PrototypeAuthorizationScope с M2O на PrototypeAuthorization и Scope и обращаться к этой связи
Это всё понятно и рассматривалось. И не сделано т.к. как раз таки не соответствует философии ORM.

авторВы думаете, что JPA вам обязано упрощать написание запросов
Я так не думаю.

авторвыучите-таки SQL за который так топите
Есть определённый лимит, дальше которого разработчик превращается в DBA, c потерей навыков именно разработки.
Поэтому глупо было бы мне говорить что я знаю SQL абсолютно хорошо.

Но в относительном положении (относительно разработчиков и пользователей SQL), я не давал в этом топике поводов усомниться в своих знаниях. Да и очень маловероятно что такое когда-либо произойдёт.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968785
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока тема активна, уточню ещё один нюанс. До перехода на Spring Boot я писал распарсенные игры в json файл, и из этого файла при каждом новом старте приложения читал данные во внутреннюю мапу, с которой и работал до следующего перезапуска приложения. Каждый новый запрос писался и в мапу и в файл одновременно.

Я решил теперь писать в БД с помощью Spring JPA (ну пробую возможности Spring'a). И у меня возник вопрос.

Стоит ли при каждом новом запуске приложения подгружать из БД данные в локальную мапу и далее работать с ней (как делалось с файлом) или работать напрямую с БД и через обычные SQL-запросы? С каждым новым запросом идти в БД напрямую или опять же использовать внутреннюю мапу, а затем уже писать в БД? Короче говоря, нужна ли мне "промежуточная" локальная мапа при использовании БД?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968808
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha,
Не нужно делать промежуточные сущности.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968812
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
miroooha,
Не нужно делать промежуточные сущности.

То бишь убрать вообще локальную мапу и работать напрямую с БД? Никаких преимуществ использование внутренней структуры данных не даст?
Интересно, что отработает быстрее: поиск по БД или хешмапке. Ну к БД можно интересный запрос написать, например. Более гибким этот вариант видится.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968818
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha,
Это просто копирование из бд таблицы в оперативку..
Мапа это ведь таблица.
..... Иногда надо. Но мы ведь не будем счас воображать кучу этих причин.
Разумеется к бд медленнее.
Ты дома склад продуктоа делаешь если под окном Пятерочка магаз?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968821
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
PetroNotC Sharp
miroooha,
Не нужно делать промежуточные сущности.

То бишь убрать вообще локальную мапу и работать напрямую с БД? Никаких преимуществ использование внутренней структуры данных не даст?
Интересно, что отработает быстрее: поиск по БД или хешмапке. Ну к БД можно интересный запрос написать, например. Более гибким этот вариант видится.

Если-б кеш полностью заменял БД - то тогда зачем тебе вообще БД?

Храни всё в хешмапке.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968823
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никто не дал правильный ответ.

Правильный ответ с точки зрения архитектуры: в боте хранить только сессию.
Всё остальное хранить в отдельном приложении, в которое бот должен ходить через REST API.

Когда потребуется другой бот (например фейсбучный), мобильное приложение или сайт - REST API не придётся заново делать\переносить из бота.

Как хранить - в БД, мапе, монго или на берестяных грамотах - не важно на самом деле, при такой архитектуре.
Как нравится так и храни. Я храню в БД.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968825
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
Как нравится так и храни.

Цена вопроса - фиксация последнего изменения. И чем ты готов пожертвовать.

Как "нравится" ... это не совсем инженерный термин IMHO.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968826
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,

Тебе виднее. Боты удел молодости))
Мы тут в корпоративе.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968833
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
miroooha,
Ты дома склад продуктоа делаешь если под окном Пятерочка магаз?

Погреб с картофлесом на даче подойдет? :D
PetroNotC Sharp
dakeiras,
Боты удел молодости))

А ещё неплохая практика для тех, кто делает свои первые проекты и поднимается на junior уровень.

Да мне вариант с БД даже больше нравится, так как с файлом и локальной мапой уже работал, теперь можно и напрямую с БД поиграться.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968836
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

Есть определённый лимит, дальше которого разработчик превращается в DBA, c потерей навыков именно разработки.
Поэтому глупо было бы мне говорить что я знаю SQL абсолютно хорошо.

Скажу как бывший DBA. Знание SQL является главной опцией именно разработчика. Ему - код делать
и развивать архитектуру и фиксить баги. DBA в данном вопросе вторичен. Он может давать консультации
по разным деталям (performance issues, disaster recovery procedurres) но принятие решений по тому
КАК разрабатывать решает именно разработчик и только он.

Поэтому нет никакой другой роли или отвественности которая обязывала бы знать SQL лучше.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968850
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
dakeiras,

Тебе виднее. Боты удел молодости))
Мы тут в корпоративе.

Бот это такой же пользовательский канал как и веб сайт или мобильное приложение.

Насчёт молодости не понял к чему (или к кому) это.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968851
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras

Есть определённый лимит, дальше которого разработчик превращается в DBA, c потерей навыков именно разработки.
Поэтому глупо было бы мне говорить что я знаю SQL абсолютно хорошо.

Скажу как бывший DBA. Знание SQL является главной опцией именно разработчика. Ему - код делать
и развивать архитектуру и фиксить баги. DBA в данном вопросе вторичен. Он может давать консультации
по разным деталям (performance issues, disaster recovery procedurres) но принятие решений по тому
КАК разрабатывать решает именно разработчик и только он.

Поэтому нет никакой другой роли или отвественности которая обязывала бы знать SQL лучше.

а как же partition pruning, external tables, анализ производительности на конкретных СУБД?

Без админских прав не получится залезть глубоко слишком.
А как только программист получает доступ админский к машине с базой (даже локальной), он уже не программист, а DBA.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968854
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
PetroNotC Sharp
dakeiras,

Тебе виднее. Боты удел молодости))
Мы тут в корпоративе.

Бот это такой же пользовательский канал как и веб сайт или мобильное приложение.

Насчёт молодости не понял к чему (или к кому) это.
ты рассказал техническую часть. А я сказал про "в чем ценность бота для бизнеса"…?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968860
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторты рассказал техническую часть. А я сказал про "в чем ценность бота для бизнеса"…?
бот это дешёвая и хорошая альтернатива мобильным приложениям.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968872
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
mayton
пропущено...

Скажу как бывший DBA. Знание SQL является главной опцией именно разработчика. Ему - код делать
и развивать архитектуру и фиксить баги. DBA в данном вопросе вторичен. Он может давать консультации
по разным деталям (performance issues, disaster recovery procedurres) но принятие решений по тому
КАК разрабатывать решает именно разработчик и только он.

Поэтому нет никакой другой роли или отвественности которая обязывала бы знать SQL лучше.

а как же partition pruning, external tables, анализ производительности на конкретных СУБД?

Без админских прав не получится залезть глубоко слишком.
А как только программист получает доступ админский к машине с базой (даже локальной), он уже не программист, а DBA.

Даже будучи DBA я не всегда имел возможность проверить то что хотелось.
Обычно environment имел типовую конфигурацию (Oracle pfile) которую нельзя было трогать.
Это не запрет а просто договорённость между группой DBA и сисадминов.

И я поднимал виртуалки и проверял свои тестовые конфигурации.

Я не вижу преград чтоб разработчик сделал тоже самое. А имеено поднял грёбаный VBox, VMVare
или Docker и просто проверил то что хочется под привилегиями SysDba.

Поэтому и partitioning и работу в RAC и восстановление сломаной БД с RMAN я проверял на виртуалках.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968874
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
авторты рассказал техническую часть. А я сказал про "в чем ценность бота для бизнеса"…?

бот это дешёвая и хорошая альтернатива мобильным приложениям.у меня приложение сканит штрих код бутылки вина в магазине и выдает всю инфу по нему.
Жду не бла бла "у нас самый лучший стиральный порошок" а альтернативу моему юз кейсу выше.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968876
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
dakeiras
пропущено...

бот это дешёвая и хорошая альтернатива мобильным приложениям.
у меня приложение сканит штрих код бутылки вина в магазине и выдает всю инфу по нему.
Жду не бла бла "у нас самый лучший стиральный порошок" а альтернативу моему юз кейсу выше.


ээ, это как раз юскейс для бота именно. Зачем для этого целое приложение?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968877
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ не вижу преград чтоб разработчик сделал тоже самое. А имеено поднял грёбаный VBox, VMVare
или Docker и просто проверил то что хочется под привилегиями SysDba.

ну да, так и приходится делать.
Докер вообще кайф - например MSSQL в 1 клик ставится.

Но всё равно это не 100% гарантия, данных меньше будет в базе и другая среда всё таки. Но так то да.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968879
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,
Блин, ну я ни одного бота не видел.
И ты не показал.
Мобильное означает на мобильнике.
Где там боты?
Не вижу ни одного. Покаж!))))
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968883
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, Телеграм установи сначала.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968884
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
dakeiras,
Блин, ну я ни одного бота не видел.
И ты не показал.
Мобильное означает на мобильнике.
Где там боты?
Не вижу ни одного. Покаж!))))

а, всё, понял.

Сорри.

вот демо бот: http://t.me/david_it_bot

https://github.com/INFINITE-TECHNOLOGY/DAVID

В Вашем случае это так организуется:
- Боту посылается фотка со штрихкодом
- на боте используется сервис или библиотека для распознавания штрихкодов
- бот шлёт сообщения с инфой юзеру

Но может быть есть и более интегрированное решение, я только финансовых ботов делаю. Игры\прикладные боты особо не делал, и не знаю какие там удобства в телеге есть для таких вещей.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968892
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PetroNotC Sharp, Телеграм установи сначала.

Угу.
Ватсап есть, вайбер есть, скайп есть.
Еще телеграмм и будет нирвана?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968893
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,

>вот демо бот:
Ресурс заблокирован
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968899
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
dakeiras,

>вот демо бот:
Ресурс заблокирован

телегу блокируют в России надо через впн
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968907
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот тут ботам и смерть пришла. Оказывается законы некоторых стран могут
запрещать бото-платформы. Мдя...
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968936
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,
Отсюда вывод что это не мейнстрим.
Удачи!
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968942
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотите открою страшную вещь?

90% жителей ЮВА считают что "Интернет" это Фейсбук.

Выводы делайте сами дальше.

А от себя замечу что Российское IT застряло в начале 2010х. Стараниями эффективных менеджеров из Яндекса. Поэтому тут не то что чат бот вызывает удивление, даже нормального приложения для заказа еды нет.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968951
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,
Это голословно, что вы наехали на IT Рф.
Вы вышели привели юз кейс бота.
Но так и не сказали ЧЕМ ОТЛИЧАЕТСЯ от веб приложения?
Мой пример был основан что ГУИ андроида это десктоп.
И просто там приложение красивше выходит.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968953
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,
Скрины хоть давайте, если не можете рассказать.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968954
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все больше убеждаюсь что боьы пишут 16тилетки.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968962
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968963
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968964
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, я пытался искать научный смысл или некую наукообразность в ботах

https://www.sql.ru/forum/1325197/chyat-boty-i-ii

Но я разочарован. Писатели ботов не знают что такое "экспертные системы". Это уже
не первый мой investigation. Я и в других инфо-ресурсах интересовался.

Логика диалога построенная на if-else мне не интересна. И TelegramLongPollingBot
ничем принципиально не отличается от HttpServlet по usecase. Просто yet another
fucken facade.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968965
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсе больше убеждаюсь что боьы пишут 16тилетки.
Оно так и есть в основном. + Иранцы (у них оч. популярна телега, когда был там пару лет назад - везде реклама групп в телеге).

И всякие гопники. Группы по библиотеке телеге - тот ещё ад)) Детский сад там полный.

С другой стороны Mayton очень интересную тему тут дал: Microsoft botframework. В ней перегиб в другую сторону идёт - жуткий CompletableFuture API но с поддержкой любых чат платформ (фейсбук, слак и прочее).

Пока у моей фирмы ниша - качественные финансовые боты на телеге, с отличным UX. Там посмотрим - либо буду добавлять чат платформы, либо буду использовать botframework вопреки качеству.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968966
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PetroNotC Sharp, я пытался искать научный смысл или некую наукообразность в ботах

https://www.sql.ru/forum/1325197/chyat-boty-i-ii

Но я разочарован. Писатели ботов не знают что такое "экспертные системы". Это уже
не первый мой investigation. Я и в других инфо-ресурсах интересовался.

Логика диалога построенная на if-else мне не интересна. И TelegramLongPollingBot
ничем принципиально не отличается от HttpServlet по usecase. Просто yet another
fucken facade.


В том MS Botframework который ты раскопал вроде есть поддержка всякого ИИ.

Но в общем случае ты совершенно прав. Поэтому правильное использование бота - просто как фронтенд.
Без попыток эмулировать разумного человека. См. выше скриншоты.
Почти никакого пользовательского ввода. Тупо кнопки.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968968
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
mayton
PetroNotC Sharp, я пытался искать научный смысл или некую наукообразность в ботах

https://www.sql.ru/forum/1325197/chyat-boty-i-ii

Но я разочарован. Писатели ботов не знают что такое "экспертные системы". Это уже
не первый мой investigation. Я и в других инфо-ресурсах интересовался.

Логика диалога построенная на if-else мне не интересна. И TelegramLongPollingBot
ничем принципиально не отличается от HttpServlet по usecase. Просто yet another
fucken facade.


В том MS Botframework который ты раскопал вроде есть поддержка всякого ИИ.

Хм... странно. Не помню что-б я такое раскапывал. Какая-там лицензия? Там есть open-source?
Описана идея? Можно ли самому делать contribute?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968970
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras
пропущено...


В том MS Botframework который ты раскопал вроде есть поддержка всякого ИИ.

Хм... странно. Не помню что-б я такое раскапывал. Какая-там лицензия? Там есть open-source?
Описана идея? Можно ли самому делать contribute?


сорри может я попутал пользователя. Кто-то тут посоветовал это.

Там всё плохо - сам адаптер API чат платформ как я понял проприетарный и завязан обязательно на Азур.
Но с точки зрения универсальности - идея правильная. Пишешь 1 раз бота - ипользуешь на любых чат платформах.

https://www.botframework.com/
https://github.com/microsoft/botframework-sdk
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968972
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
mayton
пропущено...

Хм... странно. Не помню что-б я такое раскапывал. Какая-там лицензия? Там есть open-source?
Описана идея? Можно ли самому делать contribute?


сорри может я попутал пользователя. Кто-то тут посоветовал это.

Там всё плохо - сам адаптер API чат платформ как я понял проприетарный и завязан обязательно на Азур.
Но с точки зрения универсальности - идея правильная. Пишешь 1 раз бота - ипользуешь на любых чат платформах.

https://www.botframework.com/
https://github.com/microsoft/botframework-sdk

Это похоже на AWS SDK. По всей видимости ты не сможешь использовать этот сорс отдельно от облака.

Вобщем эта тема тоже мне не интересна. Вообще всё коробочное и пропреитарное - можно обсуждать
даже в форумах девопсов и дизайнеров. Программирования тут мало. И следовательно предмета
для обсуждения еще меньше.

А в преддверии тотального ИИ мы все скоро запишемся в управдомы девопсы.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39968975
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
...

двачую.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39969505
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто там эксперт по heroku? Хотел пробно поднять бота, но не получилось. Точнее получилось, но он молчит. Использовал настройки, с которыми работал обычный (не Spring) бот: с Procfile, main-class в pom.xml, и конфигурация worker. Какая конфигурация нужна для Spring Boot бота?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39969546
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
Кто там эксперт по heroku? Хотел пробно поднять бота, но не получилось. Точнее получилось, но он молчит. Использовал настройки, с которыми работал обычный (не Spring) бот: с Procfile, main-class в pom.xml, и конфигурация worker. Какая конфигурация нужна для Spring Boot бота?

https://github.com/INFINITE-TECHNOLOGY/DAVID
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39969551
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу где держать в базе или в коде
если все данные влезают в объекты, значит данных мало, а если их мало, то и СУБД держит их в кеше.
плюс субд ориентирована нативно для такой работы

по ботам - куча вариантов про двухфакторную авторизацию, использование бота добавляет ещё один вариант. на Хабре уже появился громоздкий код, но можно сделать намного проще.
в отличие от авторизации по qr - не надо писать приложения для мобилок.
в отличие от смс - бесплатно.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39969800
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dakeiras,

Ага, значит в Procfile уже не worker, а web.
А проект вручную надо собирать? Или heroku сам его соберёт? Плюс я с gradle не работал, только Maven.
Но если не собирать, то какой путь указывать для jar'ника.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970196
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот что не так?
Беру простейшего бота на вебхуках.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@RestController
public class WebHookController {

    private final WebHookBot bot;

    public WebHookController(WebHookBot bot) {
        this.bot = bot;
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public BotApiMethod<?> onUpdateReceived(@RequestBody Update update) {
        return bot.onWebhookUpdateReceived(update);
    }
}


Код: 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.
@Component
@FieldDefaults(level = AccessLevel.PRIVATE)
public class WebHookBot extends TelegramWebhookBot {

    @Getter
    @Value("${bot.username}")
    String botUsername;

    @Getter
    @Value("${bot.token}")
    String botToken;

    @Getter
    @Value("${bot.path}")
    String botPath;

    @Override
    public BotApiMethod <?> onWebhookUpdateReceived(Update update) {
        if (update.hasMessage() && update.getMessage().hasText()) {
            Long chatId = update.getMessage().getChatId();
            try {
                execute(new SendMessage(chatId, "Привет"));
            }
            catch (TelegramApiException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

}


Создал приложение на heroku. Прописал в проперти:
Код: java
1.
2.
3.
bot.username=webhook_gp_bot
bot.token=1285409619:AAHhLD0f206MjQ2EZxVkos5XyqystfOcdYc
bot.path=https://webhook-bot-test.herokuapp.com/


Установил для бота соответствующий вебхук по такому шаблону:
Код: java
1.
https://api.telegram.org/bot{my_bot_token}/setWebhook?url=https://webhook-bot-test.herokuapp.com/


Всё подхватилось, тестировал через адрес, который генерит ngrok. Делаю деплой, heroku собирает jar-ник, из логов:
Код: java
1.
Building jar: /tmp/build_4ffcfa4a31fcaeb4cb1a372ee2af3f63/target/webhook_bot-1.0-SNAPSHOT.jar


В панели heroku dyno ставится автоматом:
Код: java
1.
web java -Dserver.port=$PORT $JAVA_OPTS -jar target/webhook_bot-1.0-SNAPSHOT.jar


Деплой успешен, бот молчит.

У кого был реальный опыт деплоя Spring Boot бота на вебхуках, может объяснить, что не так? Я код пишу меньше, чем вожусь с этим деплоеем.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970204
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
dakeiras,

Ага, значит в Procfile уже не worker, а web.
А проект вручную надо собирать? Или heroku сам его соберёт? Плюс я с gradle не работал, только Maven.
Но если не собирать, то какой путь указывать для jar'ника.


Gradle сам соберёт, надо просто прилинковать github репозиторий
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970205
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБеру простейшего бота на вебхуках.
а зачем на веб хуках? Оно нормально работало только в фантазиях Дурова.

Все делают на GetUpdates.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970217
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dakeiras
авторБеру простейшего бота на вебхуках.

а зачем на веб хуках?
Потому что обычный на LongPolling аналогично не заводится, решил попробовать вебхуки. Во время тестов на вебхуках работал нормально. В общем, ни одна срань на спринг буте на heroku не работает (у меня).
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970267
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что в логах?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970304
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут описано как смотреть

https://devcenter.heroku.com/articles/logging
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970513
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
А что в логах?

В логах heroku нашел следующее:
Код: java
1.
2.
3.
4.
5.
6.
7.
2020-06-18T10:42:58.000000+00:00 app[api]: Build succeeded
2020-06-18T10:43:00.511493+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2020-06-18T10:43:00.516632+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8
2020-06-18T10:43:00.658780+00:00 app[web.1]: no main manifest attribute, in target/simple_spring_bot-1.0.jar
2020-06-18T10:43:05.756795+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2020-06-18T10:43:05.760348+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8
2020-06-18T10:43:05.842359+00:00 app[web.1]: no main manifest attribute, in target/simple_spring_bot-1.0.jar


Видимо, проблема в том, что heroku либо не может собрать jar, либо не может его "распаковать и запустить".

В Procfile я положил:
Код: java
1.
web: java -jar target/simple_spring_bot-1.0.jar



Добавил в pom.xml:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<build>
        <plugins>
            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>ru.miroha.Application</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>


Теперь в логах:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
2020-06-18T10:54:24.009294+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8
2020-06-18T10:54:24.108410+00:00 app[web.1]: Exception in thread "main" java.lang.NoClassDefFoundError: org/telegram/telegrambots/ApiContextInitializer
2020-06-18T10:54:24.108549+00:00 app[web.1]: at ru.miroha.Application.main(Application.java:10)
2020-06-18T10:54:24.108644+00:00 app[web.1]: Caused by: java.lang.ClassNotFoundException: org.telegram.telegrambots.ApiContextInitializer
2020-06-18T10:54:24.108689+00:00 app[web.1]: at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
2020-06-18T10:54:24.108737+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
2020-06-18T10:54:24.108770+00:00 app[web.1]: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
2020-06-18T10:54:24.108822+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
2020-06-18T10:54:24.108897+00:00 app[web.1]: ... 1 more
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970520
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя в артифактах не собралсись важные классы такие как ApiContextInitializer

Чтоб их собрать в 1 артифакт - попробуй плагин maven-shade-plugin вместо jar-plugin.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970525
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписал "дино" с web на worker и этот бот заработал.
В pom.xml:
Код: 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.
<build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.1.1</version>
                <configuration>
                    <assembleDirectory>target</assembleDirectory>
                    <programs>
                        <program>
                            <mainClass>ru.miroha.Application</mainClass>
                            <name>workerBot</name>
                        </program>
                    </programs>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>


В Procfile:
Код: java
1.
worker: sh target/bin/workerBot


И в самом heroku включил ползунок, бот заработал. Однако в логах по-прежнему мелькает строчка:
Код: java
1.
no main manifest attribute, in target/simple_spring_bot-1.0.jar


Теперь надо попробовать на настоящем боте, а не тестовом.

Но вот заставить бота работать как web пока не получается.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970534
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что ж, поднял своего спрингового бота с такой же конфигурацией, пошел смотреть логи, а там:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
2020-06-18T11:24:06.428694+00:00 app[worker.1]: Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-06-18T11:24:06.434863+00:00 app[worker.1]: 2020-06-18 11:24:06 ERROR LoggingFailureAnalysisReporter:42 -
2020-06-18T11:24:06.434864+00:00 app[worker.1]:
2020-06-18T11:24:06.434865+00:00 app[worker.1]: ***************************
2020-06-18T11:24:06.434866+00:00 app[worker.1]: APPLICATION FAILED TO START
2020-06-18T11:24:06.434866+00:00 app[worker.1]: ***************************
2020-06-18T11:24:06.434867+00:00 app[worker.1]:
2020-06-18T11:24:06.434867+00:00 app[worker.1]: Description:
2020-06-18T11:24:06.434867+00:00 app[worker.1]:
2020-06-18T11:24:06.434868+00:00 app[worker.1]: The dependencies of some of the beans in the application context form a cycle:
2020-06-18T11:24:06.434868+00:00 app[worker.1]:
2020-06-18T11:24:06.434869+00:00 app[worker.1]: тФМтФАтФАтФАтФАтФАтФР
2020-06-18T11:24:06.434871+00:00 app[worker.1]: |  updateReceiver defined in URL [jar:file:/app/target/repo/ru/miroha/googleplay-assistant-telegrambot/1.1/googleplay-assistant-telegrambot-1.1.jar!/ru/miroha/bot/handler/UpdateReceiver.class]
2020-06-18T11:24:06.434871+00:00 app[worker.1]: тЖС     тЖУ
2020-06-18T11:24:06.434872+00:00 app[worker.1]: |  textMessageHandler defined in URL [jar:file:/app/target/repo/ru/miroha/googleplay-assistant-telegrambot/1.1/googleplay-assistant-telegrambot-1.1.jar!/ru/miroha/bot/handler/message/TextMessageHandler.class]
2020-06-18T11:24:06.434873+00:00 app[worker.1]: тЖС     тЖУ
2020-06-18T11:24:06.434873+00:00 app[worker.1]: |  randomMessageHandler defined in URL [jar:file:/app/target/repo/ru/miroha/googleplay-assistant-telegrambot/1.1/googleplay-assistant-telegrambot-1.1.jar!/ru/miroha/bot/handler/message/RandomMessageHandler.class]
2020-06-18T11:24:06.434874+00:00 app[worker.1]: тЖС     тЖУ
2020-06-18T11:24:06.434875+00:00 app[worker.1]: |  googlePlayGamesAssistantBot (field private ru.miroha.bot.handler.UpdateReceiver ru.miroha.bot.GooglePlayGamesAssistantBot.updateReceiver)
2020-06-18T11:24:06.434875+00:00 app[worker.1]: тФФтФАтФАтФАтФАтФАтФШ



И вот откуда это берется, если на локальной машине всё прекрасно работает?

Ну и БД он естественно не подхватывает/не создаёт.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970540
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ану попробуй как он предлагает запуск с application with 'debug' enabled
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970542
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Удалось разрешить конфликт зависимостей (точнее циклическое создание бинов), но там свои косяки появились (думаю, решаемы), но хотя бы бот стал отвечать.
Как мне подружить heroku с БД? На локальном ПК я создавал БД (Postgres) локально через pgAdmin.

Собственно, в application.propeties лежит это:
Код: java
1.
2.
3.
4.
5.
6.
#Настройки для подключения к БД postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/telegrambot
spring.datasource.username=postgres
spring.datasource.password=1234567
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false



Но по идее heroku создает свою БД? Плагин для БД он сам подтянул, вижу в dashboard. Какие настройки нужны?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970543
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю я не специалист в heroku. Но если тарифный план включает в себя оплату за БД то это действие
должно где-то проходить как создание еще одного сервиса. Так делает AWS по крайней мере.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970663
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Я не знаю я не специалист в heroku. Но если тарифный план включает в себя оплату за БД то это действие
должно где-то проходить как создание еще одного сервиса. Так делает AWS по крайней мере.

Нашел вроде как хорошую статейку: https://dev.to/prisma/how-to-setup-a-free-postgresql-database-on-heroku-1dc1
Попробую, потом отпишусь.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970671
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подтянул настройки, всё заработало! Какое облегчение, победить в этом бою. Надеюсь, что heroku БД не "сбрасывает" каждый день, как было с файлом.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970672
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ещё смогу победить вебхуки, вообще будет замечательно.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970738
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кстати новость проскочила что РФ разблокирует телеграм. Думаю что ботов станут делать активнее.
Чтож. Я надеюсь только что боты станут чуть умнее чем диалоговые меню в магазинах.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970744
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Мне кажется что бот к телеге равноценен плагину к браузеру.
Кто то пишет. Но это единицы.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970764
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton,
Мне кажется что бот к телеге равноценен плагину к браузеру.
Кто то пишет. Но это единицы.

неправильно кажется. И уже 100 раз объясняли и даже картинки давали. Надо уметь воспринимать информацию.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970801
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Мне кажется что бот к телеге равноценен плагину к браузеру.
Кто то пишет. Но это единицы.
это отдельное направление
через бот торгуют,
управляют,
общаются
авторизуются
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970819
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,
Мне не нравится что оно в пределах телеги.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970820
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

НАПРАВЛЕНИЕМ оно станет, когда пуповину от телеги отрежет.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970828
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Я не знаю я не специалист в heroku. Но если тарифный план включает в себя оплату за БД то это действие
должно где-то проходить как создание еще одного сервиса. Так делает AWS по крайней мере.

Кстати, судя по имени хоста, heroku в качестве хоста для БД использует AWS.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970848
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перепродает услугу получается? Ну тогда надо цены сравнить.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970849
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
dakeiras,
Мне не нравится что оно в пределах телеги.
бот это часть телеги и без телеги он не имеет ни смысла ни существования.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970850
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бот - это слишком громкое слово. Никакой это не бот. Это просто сервлет который работает в контейнере
мессенжера телеграм.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970853
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
dakeiras,
Мне не нравится что оно в пределах телеги.


Боты? Их полно:
- Фейсбук
- Ватсап
- Слак
- Саппорт боты на сайтах
и пр.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970854
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Бот - это слишком громкое слово. Никакой это не бот. Это просто сервлет который работает в контейнере
мессенжера телеграм.

да.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970855
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Бот - это слишком громкое слово. Никакой это не бот. Это просто сервлет который работает в контейнере
мессенжера телеграм.
))
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970859
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если мигрировать в AWS то я-бы предложит поробовать такую платформу как ECS (это ихний докер).
Должна быть дешевле чем EC2.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970869
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Бот - это слишком громкое слово. Никакой это не бот. Это просто сервлет который работает в контейнере
мессенжера телеграм.
это не правильно
телеграм обеспечивает только передачу сообщений
обработчик этих сообщений находится у тебя на сервере. как ты его сделаешь - это зависит от твоих знаний и возможностей.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970872
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
Боты? Их полно:
- Фейсбук
- Ватсап
- Слак
- Саппорт боты на сайтах

бот - Ватсап платный
остальные не так популярны
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970875
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
dakeiras
Боты? Их полно:
- Фейсбук
- Ватсап
- Слак
- Саппорт боты на сайтах

бот - Ватсап платный
остальные не так популярны

Фейсбук не популярен?
Я выше уже говорил, что 90% людей в ЮВА считают что Интернет это Фейсбук.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970878
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, удалось выяснить, что в бесплатном плане heroku поддерживает только 20 подключений, потом БД не доступна. Проблема у меня в коде, так как после запроса (я обращаюсь через репозиторий), я получается не закрываю подключение к БД. В итоге повис сейчас на 20/20 подключений. Сбросил все подключения вручную через Heroku CLI и рестартнул приложение. Вернулось к 0/20. Сделал 1 запрос к БД - стало 10/20. Спустя пару секунд, не обращаясь из телеграм бота к БД, уже снова 20/20. Короче говоря, утечки, не гуд.

Как фиксить? Как закрывать подключение к БД? В классическом JDBC я примерно понимаю как, а вот в Spring Boot? Я вручную подключение не создаю, всё отдаю на волю спрингу и использую только репозиторий.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970884
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй Apache Dbcp или Hikari connection pools.

20 сеансов это свыше головы тебе хватит.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970888
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
Фейсбук не популярен?
он популярен, но вот про его боты я не слышал
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970904
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
Бот - это слишком громкое слово. Никакой это не бот. Это просто сервлет который работает в контейнере
мессенжера телеграм.
это не правильно
телеграм обеспечивает только передачу сообщений
обработчик этих сообщений находится у тебя на сервере. как ты его сделаешь - это зависит от твоих знаний и возможностей.

ОК. Я согласен. Я просто подчеркиваю что никаких опций ИИ Телеграмский API
нам не предоставил. В моём понимании Бот - это не диалоговая система а некий
симулятор человека на той стороне.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970916
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В моём понимании Бот - это не диалоговая система а некий
симулятор человека на той стороне.
основа - диалоговая система.
"та сторона" - это твоя программа, если ты сможешь качественно симулировать человека -значит будет хорошой у тебя бот
от апи телеги никаких опций и не требуется - только качественный канал
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970959
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
В моём понимании Бот - это не диалоговая система а некий
симулятор человека на той стороне.
основа - диалоговая система.
"та сторона" - это твоя программа, если ты сможешь качественно симулировать человека -значит будет хорошой у тебя бот
от апи телеги никаких опций и не требуется - только качественный канал

А чем она принципиально будет отличаться от мобильного сайта?

Тоесть я хочу понять цимес диалогового бота. Может мне лень тайпать слова?

Может я просто выберу в меню нужный мне тип товара?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970965
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А чем она принципиально будет отличаться от мобильного сайта?
если по большому счёту - ничем
но если вникать в тонкости - то почти всем.
основное кодирование этих сообщений
в браузерах есть пуш сообщения, для них используется какой-то сервер, и, кажись, платный
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970970
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Ну, если для тебя кодирование и шифроваться это главное, тогда конечно.
Террорист?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970978
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
боже вас упоси юзера заставалять писать боту.
Кнопки же есть в боте! За что вы так ненавидите юзеров?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970980
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
А чем она принципиально будет отличаться от мобильного сайта?
если по большому счёту - ничем
но если вникать в тонкости - то почти всем.
основное кодирование этих сообщений
в браузерах есть пуш сообщения, для них используется какой-то сервер, и, кажись, платный

Платный? О чем ты говоришь? Ты себе на сайте легко поднимешь web-push без всякой оплаты.
Тыж вебсокеты кодил? И в пуше тоже самое.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970981
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
боже вас упоси юзера заставалять писать боту.
Кнопки же есть в боте! За что вы так ненавидите юзеров?

Вот вот. Яж к тому и подвожу. Если есть кнопки - нахрена мне нужен вообще мессенджер?

Обычный статический контент с формочками. И я буду счастлив как слон.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970989
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, кто-нибудь может объяснить феномен?
Я запускаю на локальной машине бота на Spring Boot: - успешный старт.

Делаю деплой того же самого кода на heroku, и получаю
ApplicationContext Error:
The dependencies of some of the beans in the application context form a cycle...

Окей, я убрал все внедрения зависимостей через конструктор и просто делаю @Autowired на полях, чтобы heroku смог поднять бота. Так работает.

Но я никак не понимаю, почему в одном месте никаких циклических зависимостей не возникает, а там на heroku бац и..

Там как-то приложение по-особому стартует?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970993
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha, запускаешь как? Через меню Idea->Run? Или через gradle bootRun?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970995
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras
боже вас упоси юзера заставалять писать боту.
Кнопки же есть в боте! За что вы так ненавидите юзеров?

Вот вот. Яж к тому и подвожу. Если есть кнопки - нахрена мне нужен вообще мессенджер?

Обычный статический контент с формочками. И я буду счастлив как слон.


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


+ боты во многом удобнее сайтов - быстрее работают, история вся видна. Можно уведомления слать.

Поэтому в сайты и в мобильные приложения добавляют ботов - с частью функционала.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39970999
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
100% согласен что вы экономите на дизайне. Я-бы сказал что это главный поинт.
И Телегу используете как PaaS.

Но не возврат ли это в 90-е когда чятом была IRC ? Или когда сайты читали через ... не приведи
господь Gopher протокол? Или когда файло скачали через ftp.

Тоесть мы полностью похоронили дизайн. Его де-факто нет. И бедный дизайнер остался без работы.
Мы лишили наш магазин идентичности. Кроме ярычка на титуле - ничего больше телега не показывает.

С моей точки зрения это какая-то странная деградация. Хотя мне как программисту - пофиг. Я то своё
рабочее место пока сохраняю.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971008
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Ну, если для тебя кодирование и шифроваться это главное, тогда конечно.
не надо утрировать
не пользуешься - не хай
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971009
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Платный? О чем ты говоришь? Ты себе на сайте легко поднимешь web-push без всякой оплаты.
Тыж вебсокеты кодил? И в пуше тоже самое.
ту несколько иное, для своих целей можно и будет похоже, но не это будет частный вариант
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971010
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
- На аутентификации можно сэкономить (я не советую правда так делать)
это почему?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971011
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
- На аутентификации можно сэкономить (я не советую правда так делать)
это почему?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971028
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
dakeiras
- На аутентификации можно сэкономить (я не советую правда так делать)
это почему?


бот это presentation layer. В нём не должно быть никакой своей бизнес логики.
Бизнес логика в REST API.
Безопасность в IAM.

Иначе получается каша.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971032
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
miroooha, запускаешь как? Через меню Idea->Run? Или через gradle bootRun?

Idea -> Run
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971034
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собирай артифакт jar. И запускай его так как делает хероку.
Только в таких условиях ты сможешь протестировать все нюансы.

Компромиссов нет.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971037
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
бот это presentation layer. В нём не должно быть никакой своей бизнес логики.
Бизнес логика в REST API.
Безопасность в IAM.

Иначе получается каша.
а какая логика?
открывается страница - на ней только число xxxxx
юзверь вводит это число в бот
бот отсылает это число к тебе на сервер
по id юзверя в боте проверяешь его наличие телефона в своей базе
если он есть - ищешь по этому числу сессию
привязываешь этого юзверя к этой сессии
и шлёшь по этой сессии новую страницу с инфой только для этого юзверя
какая бизнес логика ?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971043
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
вадя
пропущено...
это почему?


бот это presentation layer. В нём не должно быть никакой своей бизнес логики.
Бизнес логика в REST API.
Безопасность в IAM.

Иначе получается каша.

Стоп-стоп. Вы щас улетите на луну с такими абстракциями. Под ботом вы подразумеваете что?
Имплементацию TelegramLongPollingBot ?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971049
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras
пропущено...


бот это presentation layer. В нём не должно быть никакой своей бизнес логики.
Бизнес логика в REST API.
Безопасность в IAM.

Иначе получается каша.

Стоп-стоп. Вы щас улетите на луну с такими абстракциями. Под ботом вы подразумеваете что?
Имплементацию TelegramLongPollingBot ?


При чём здесь абстракции. Это "архитектура" (ненавижу это слово).

автора какая логика?
открывается страница - на ней только число xxxxx
юзверь вводит это число в бот
бот отсылает это число к тебе на сервер
по id юзверя в боте проверяешь его наличие телефона в своей базе
если он есть - ищешь по этому числу сессию
привязываешь этого юзверя к этой сессии
и шлёшь по этой сессии новую страницу с инфой только для этого юзверя
какая бизнес логика ?

я ничего не понял. Можете понятнее описать? Вы имеете в виду что бот шлёт какое-то OTP?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras, ты решил к боту подойти как к ентерпрайзу?

Это обосновано?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971057
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
я ничего не понял. Можете понятнее описать? Вы имеете в виду что бот шлёт какое-то OTP?
бот выступает в роли смс только в обратном направлении
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971091
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras, ты решил к боту подойти как к ентерпрайзу?

Это обосновано?

имхо в современных реалиях - экономически это стало целесообразно.
Изза облак, опенсорса и пр. Т.е. то что раньше стоило дорого, сейчас стало доступно - предоставляя преимущества.

Но это имхо.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971095
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,

Я прекрасно знаю как работают облака. Но твое предложение пе декомпозиции бота на слои в данном примере - безсмысленно. Оно ничего не даёт автору.

Но оно может обрести смысл если ты поможешь ему сэкономить на хостинге или обеспечить скейлинг.

Только автор пока ни о чем таком не просит.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971099
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, помогите "архитектуру" поправить, чтобы избежать циклических зависимостей. Spring выносит мне мозг.

В общем, бот работает по примерно такой схеме:
Получает Update в главном классе, который наследуется от LongPolling, потом я сразу отправляю этот апдейт в UpdateReceiver, откуда в зависимости от типа Update еще дальше отправляю его "гулять" по обработчикам. В классе бота написаны методы для отправки сообщения юзеру, поэтому этот "бот" нужен во всех обработчиках. Но этот бот зависит от UpdateReceiver, которому так же нужен этот "бот". В итоге циклическая зависимость:

Чёрным цветом - классы (почти все помечены как @Component), красным - инжектнутые зависимости.
Сделал конфигурацию для класса бота:
Код: 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.
@Component
@ConfigurationProperties(prefix = "bot")
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BotConfig {
    String userName;
    String botToken;
}


@Configuration
public class AppConfig {
    private BotConfig botConfig;

    public AppConfig(BotConfig botConfig) {
        this.botConfig = botConfig;
    }

    @Bean
    public GooglePlayGamesAssistantBot googlePlayGamesAssistantBot(UpdateReceiver updateReceiver) {
        GooglePlayGamesAssistantBot bot = new GooglePlayGamesAssistantBot(updateReceiver);
        bot.setBotToken(botConfig.getBotToken());
        bot.setBotUsername(botConfig.getUserName());
        return bot;
    }
}


Немного "бота":
Код: 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.
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class GooglePlayGamesAssistantBot extends TelegramLongPollingBot {

    String botUsername;

    String botToken;

    private UpdateReceiver updateReceiver;

    public GooglePlayGamesAssistantBot(UpdateReceiver updateReceiver) {
        this.updateReceiver = updateReceiver;
    }

    @Override
    public void onUpdateReceived(Update update) {
        updateReceiver.handleUpdate(update);
    }

    public synchronized void sendTextMessage(long chatId, String message) {
        SendMessage textMessage = new SendMessage()
                .enableMarkdown(false)
                .setChatId(chatId)
                .setText(message);
        try {
            execute(textMessage);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }


Едем в UpdateReceiver:
Код: 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.
@Service
public class UpdateReceiver {

    private TextMessageHandler textMessageHandler;
    private CallbackQueryHandler callbackQueryHandler;
    private GooglePlayGamesAssistantBot bot;


    public UpdateReceiver(TextMessageHandler textMessageHandler,
                          CallbackQueryHandler callbackQueryHandler,
                          GooglePlayGamesAssistantBot bot){
        this.textMessageHandler = textMessageHandler;
        this.callbackQueryHandler = callbackQueryHandler;
        this.bot = bot;
    }

    public void handleUpdate(Update update) {
        if (update.hasMessage() && update.getMessage().hasText()){
            textMessageHandler.handleTextMessage(update);
        }
        else if (update.hasCallbackQuery()) {
            callbackQueryHandler.handleCallbackQuery(update.getCallbackQuery());
        }
        else {
            bot.sendTextMessage(update.getMessage().getChatId(),
                    "Неверная команда");
        }
    }
}


Ну и для примера в "текстовый" обработчик далее по цепочке:
Код: 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.
@Component
public class TextMessageHandler {

    private final List<MessageHandler> messageHandlers;
    private GooglePlayGamesAssistantBot bot;

    public TextMessageHandler(List<MessageHandler> messageHandlers,
                              GooglePlayGamesAssistantBot bot) {
        this.messageHandlers = messageHandlers;
        this.bot = bot;
    }

    public void handleTextMessage(Update update){
        long chatId = update.getMessage().getChatId();
        String text = update.getMessage().getText();
        try {
            messageHandlers.stream()
                    .filter(handler -> handler.canHandle(text))
                    .findAny()
                    .orElseThrow(IllegalArgumentException::new)
                    .handle(update);
        }
        catch (IllegalArgumentException e){
            bot.sendTextMessage(chatId, "Такой команды я не знаю!");
        }

    }
}


Ну и получаю:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
The dependencies of some of the beans in the application context form a cycle:

   callbackQueryHandler defined in file [C:\Users\РОМА\IdeaProjects\assistant_tbot\target\classes\ru\miroha\bot\handler\callback\CallbackQueryHandler.class]

|  googlePlayGamesAssistantBot defined in class path resource [ru/miroha/AppConfig.class]

|  updateReceiver defined in file [C:\Users\РОМА\IdeaProjects\assistant_tbot\target\classes\ru\miroha\bot\handler\UpdateReceiver.class]

|  textMessageHandler defined in file [C:\Users\РОМА\IdeaProjects\assistant_tbot\target\classes\ru\miroha\bot\handler\message\TextMessageHandler.class]

|  helpMessageHandler defined in file [C:\Users\РОМА\IdeaProjects\assistant_tbot\target\classes\ru\miroha\bot\handler\message\HelpMessageHandler.class]



Проблему смог решить двумя путями.
1) Заменить все конструкторы на поля и повесить на них @Autowired
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Service
public class UpdateReceiver {
    
    @Autowired
    private TextMessageHandler textMessageHandler;
    @Autowired
    private CallbackQueryHandler callbackQueryHandler;
    @Autowired
    private GooglePlayGamesAssistantBot bot


В таком случае бот работает, но постоянно плюется (почти ежесекундно) ошибками о том, что он не может получить апдейты, но он получает их и обрабатывает корректно.
2) Добавить в конструкторе @Lazy:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Service
public class UpdateReceiver {
    
    private TextMessageHandler textMessageHandler;
    private CallbackQueryHandler callbackQueryHandler;
    private GooglePlayGamesAssistantBot bot;


    public UpdateReceiver(TextMessageHandler textMessageHandler,
                          CallbackQueryHandler callbackQueryHandler,
                          @Lazy GooglePlayGamesAssistantBot bot){
        this.textMessageHandler = textMessageHandler;
        this.callbackQueryHandler = callbackQueryHandler;
        this.bot = bot;
    }


В таком случае бот так же продолжает плеваться сообщениями типа:
Код: java
1.
2.
ERROR Telegram Bots Api:85 - BOTSESSION
2020-06-19T18:11:58.871673+00:00 app[worker.1]: org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException: Error getting updates



Оба решения не совсем мне нравятся. В общем, нужен совет, что поменять и как заставить это чудо полноценно работать.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971195
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971265
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras, обычно я вместо длинной колбасы методов ввожу 1 поясняющую переменную.
Кажется называется Introduce Temporary Variable refactoring.

Тоесть вместо такого

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
if ((!update.hasMessage()) && update.hasCallbackQuery()) {
                if (update.getCallbackQuery().getData().startsWith("/")) {
                    callPlugin(update.getCallbackQuery().getData().split(" ")[0].substring(1),
                            update.getCallbackQuery().getMessage().getChat().getFirstName(),
                            silent,
                            sender,
                            update.getCallbackQuery().getMessage().getChatId(),
                            Arrays.asList(update.getCallbackQuery().getData().split(" "))
                    );
                } else {
                    receiveInput(update.getCallbackQuery().getData(), update.getCallbackQuery().getMessage().getChatId(), silent, sender);
                }



Делаю introduce data, и некий неизвестный объект message (не знаю какого он типа сам подставь нужный).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
if ((!update.hasMessage()) && update.hasCallbackQuery()) {
                String data = update.getCallbackQuery().getData();
                if (data.startsWith("/")) {
                    Object message = update.getCallbackQuery().getMessage();
                    callPlugin(data.split(" ")[0].substring(1),
                            message.getChat().getFirstName(),
                            silent,
                            sender,
                            message.getChatId(),
                            Arrays.asList(data.split(" "))
                    );
....



После этого код получается... более git-friendly. Строки короче. И смысл более сжатый и понятный. И изменения
легче вносить т.к. они сжаты в 1 точке.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971275
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ентерпрайз не отменяет KISS.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971277
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так же делаю часто. Это более хорошая практика, делать if условие короче.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971279
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras, ну так исправляй. Что-ж ты несовершенный код выдаешь как пример. Потом джуны посмотрят
и примут за чистую монету. И еще будут рассказывать что так видели и это правильно.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971283
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не против бинов. Я просто эстетику кода оценивал. Чисто по диагонали.
Обычно видно чем сильнее разработчик тем меньше у него копи-паст и само-повторения
кода. У Бесконечно-Технологичного Дэвида - дохрена копи-паст и код его от этого... хм
слегка теряет престиж.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971317
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы о разном коде говорите.

Zzz79 говорит про адский код топик стартера. И как я понимаю троллит к тому же (я надеюсь на это).
(upd: я так и не понял где Zzz79 увидел бины и у кого).

В Дэвиде нет бинов. Даже компонентов нет. Хотя autowiring есть и всё в Спринге.
Надо будет по местному совету передалать на Boot Starter и prototype бины.

авторЯ не против бинов. Я просто эстетику кода оценивал. Чисто по диагонали.
Обычно видно чем сильнее разработчик тем меньше у него копи-паст и само-повторения
кода. У Бесконечно-Технологичного Дэвида - дохрена копи-паст и код его от этого... хм
слегка теряет престиж.
2 фактора. Сила разработчика + количество итераций рефакторинга.
Это не последняя итерация. Но там далеко не всё так плохо.

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

Насчёт своей силы Java разработчика: она на уровне мидла. Я никогда не кричал и не кричу что я знаю Яву отлично (или даже хорошо).
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971318
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton,
Я просто к чему- что я разгребаю и легаси и более менее современный код
но давно уже бины не видел

А что не так стало с бинами-то теперь?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971320
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

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

Не согласен. Я не вижу здесь влияния API TelegramBots.

Я указал вам ВАШ авторский код который находится в namespace io.infinite.david.

И я говорю - этот код плох. Его надо улучшить.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971323
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mayton,

Кстати, не хотел разбивать Ваш идеализм насчёт эстетики кода.

Но просто откройте популярные опен сорс проекты. Например тот же Logback.
И просто ужаснитесь тому хтоническому ужасу который там внутри.

И так в половине проектов. И они используются и развиваются.

Тоже самое касается и проприетарщины. Там даже хуже бывает.

Есть и отличные примеры конечно. Где всё идеально сделано (и опен сорс и проприетарные). К таким надо стремиться конечно.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971325
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras

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

Не согласен. Я не вижу здесь влияния API TelegramBots.

Я указал вам ВАШ авторский код который находится в namespace io.infinite.david.

И я говорю - этот код плох. Его надо улучшить.


Даже не TelegramBots API. А сам бот АПИ телеги сделан через жопу Дуровым. Если будите с ним работать - сразу станет понятно.
Ненормализованная модель данных, неоптимизированная. Не REST не GraphQL. Не рыба ни мясо короче.

Я не спорю что мой код плох там. И улучшу в след раз когда буду что-то менять там.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971326
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

Даже не TelegramBots API. А сам бот АПИ телеги сделан через жопу Дуровым. Если будите с ним работать - сразу станет понятно.
Ненормализованная модель данных, неоптимизированная. Не REST не GraphQL. Не рыба ни мясо короче.

Денормализация - вообще не в тему. При чем здесь это к качеству кода? Это разные векторы.
REST/GraphQL - да пофиг вообще. Тебе как прикладнику какая разница какой там над-сетевой проткол?
Ты же не браузером к боту подключаешся верно?

dakeiras

Я не спорю что мой код плох там. И улучшу в след раз когда буду что-то менять там.

Ты уж постарайся. Меня коробит когда кто-то приводит эталоном свои проекты даже
не пройдя независимые code-review.

Я по возможности буду напоминать тебе об этом несовершенстве.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971327
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

Но просто откройте популярные опен сорс проекты. Например тот же Logback.
И просто ужаснитесь тому хтоническому ужасу который там внутри.

Этот проект?

https://github.com/qos-ch/logback

Ну ткните меня туда где ужас-ужас. Я вот хочу ужастнуться. Может сам напишу issue с пожеланием об улучшении.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971328
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДенормализация - вообще не в тему. При чем здесь это к качеству кода? Это разные векторы.
REST/GraphQL - да пофиг вообще. Тебе как прикладнику какая разница какой там над-сетевой проткол?
Ты же не браузером к боту подключаешся верно?

Ну не знаю как это формально описать. В общем если столкнётесь с этим АПИ - увидите сами. Он... странный.
Они запихнули всё в объект Update. Поэтому приходится постоянно делать if (update.hasThis.....), if (update.hasThat...)

Код: java
1.
if ((!update.hasMessage()) && update.hasCallbackQuery())



Могли они как-то иначе сделать.

авторТы уж постарайся. Меня коробит когда кто-то приводит эталоном свои проекты даже
не пройдя независимые code-review.

Я по возможности буду напоминать тебе об этом несовершенстве.
да я только рад, спасибо. Это помогает.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971331
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

Код: java
1.
if ((!update.hasMessage()) && update.hasCallbackQuery())



Не понимаю проблемы. Сделай себе функцию и пользуйся.
Код: java
1.
hasMessageAndCllback(update)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971335
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras

Но просто откройте популярные опен сорс проекты. Например тот же Logback.
И просто ужаснитесь тому хтоническому ужасу который там внутри.

Этот проект?

https://github.com/qos-ch/logback

Ну ткните меня туда где ужас-ужас. Я вот хочу ужастнуться. Может сам напишу issue с пожеланием об улучшении.

ch.qos.logback.classic.Logger

filterAndLog_0_Or3Plus

И прочие чудеса на виражах.
Там нормального очень мало на самом деле.

Код: java
1.
2.
3.
4.
5.
6.
7.
    public void debug(Marker marker, String format, Object... argArray) {
        filterAndLog_0_Or3Plus(FQCN, marker, Level.DEBUG, format, argArray, null);
    }

    public void debug(Marker marker, String msg, Throwable t) {
        filterAndLog_0_Or3Plus(FQCN, marker, Level.DEBUG, msg, null, t);
    }



При этом ирония в том что logback и Slf4j делали одни и теже авторы.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971336
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras

Код: java
1.
if ((!update.hasMessage()) && update.hasCallbackQuery())



Не понимаю проблемы. Сделай себе функцию и пользуйся.
Код: java
1.
hasMessageAndCllback(update)



да. Так и сделаю. Но это получается уже API над API.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971339
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
mayton
пропущено...

Не понимаю проблемы. Сделай себе функцию и пользуйся.
Код: java
1.
hasMessageAndCllback(update)



да. Так и сделаю. Но это получается уже API над API.

Я последние 20 лет этим и занят. Делаю API над API.
А ты как хотел?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971340
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

Код: java
1.
2.
3.
4.
5.
6.
7.
    public void debug(Marker marker, String format, Object... argArray) {
        filterAndLog_0_Or3Plus(FQCN, marker, Level.DEBUG, format, argArray, null);
    }

    public void debug(Marker marker, String msg, Throwable t) {
        filterAndLog_0_Or3Plus(FQCN, marker, Level.DEBUG, msg, null, t);
    }



Я посмотрел. Это внутренние приватные методы. Тебе их вызывать не надо.

Ты же знаешь что такое инкапсуляция?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971362
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras

Код: java
1.
2.
3.
4.
5.
6.
7.
    public void debug(Marker marker, String format, Object... argArray) {
        filterAndLog_0_Or3Plus(FQCN, marker, Level.DEBUG, format, argArray, null);
    }

    public void debug(Marker marker, String msg, Throwable t) {
        filterAndLog_0_Or3Plus(FQCN, marker, Level.DEBUG, msg, null, t);
    }



Я посмотрел. Это внутренние приватные методы. Тебе их вызывать не надо.

Ты же знаешь что такое инкапсуляция?

так и у меня это внутренние методы. Это не отменяет кривизны.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971364
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во что ты предлагаешь это переименовать?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971387
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Во что ты предлагаешь это переименовать?

Тут проблема не переименовании.

А в интерфейсах и null. И ещё большая проблема в интерфейсах самого Slf4j.
В общем криво спроектировано да так что вообще никак это не исправить сохраняя обратную совместимость.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971391
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
mayton
Во что ты предлагаешь это переименовать?

Тут проблема не переименовании.

А в интерфейсах и null. И ещё большая проблема в интерфейсах самого Slf4j.
В общем криво спроектировано да так что вообще никак это не исправить сохраняя обратную совместимость.

Подожди подожди! Ты меня совсем запутал. То мы обсуждали LogBack.

То ты говоришь про null в интерфейсах. Это баг? Он существует в их bug-tracker?

И ты теперь переключаешся на Slf4j, который вообще не логгер а просто некий адаптер или мост
сразу ко ВСЕМ логгерам. В этом его идея. Может ты не понял идею для чего создавался Slf4j?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971415
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох, какие тут дискуссии насчет кода.
А мой говнокод безработного недоджуна-trainee уровня сможете оценить, как допилю?

Проблему циклических зависимостей решил путем того, что из всяких handler'ов теперь возвращаю значение/сообщение, которое отправляется уже в главный класс бота. Т.о. нет необходимости инжектить бота в каждый обработчик. ИМХО, стало меньше гибкости, но в принципе терпимо.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971416
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
dakeiras
пропущено...

Тут проблема не переименовании.

А в интерфейсах и null. И ещё большая проблема в интерфейсах самого Slf4j.
В общем криво спроектировано да так что вообще никак это не исправить сохраняя обратную совместимость.

Подожди подожди! Ты меня совсем запутал. То мы обсуждали LogBack.

То ты говоришь про null в интерфейсах. Это баг? Он существует в их bug-tracker?

И ты теперь переключаешся на Slf4j, который вообще не логгер а просто некий адаптер или мост
сразу ко ВСЕМ логгерам. В этом его идея. Может ты не понял идею для чего создавался Slf4j?

Проблема в Slf4j: Throwable можно передать только без других аргументов:
(org.slf4j.Logger)
Код: java
1.
public void error(String msg, Throwable t);



Похоже это попытались обойти в Logback расчитывая что сработает следующее:
(ch.qos.logback.classic.Logger)
Код: java
1.
2.
3.
4.
5.
6.
    public void error(String format, Object... argArray) {
        filterAndLog_0_Or3Plus(FQCN, null, Level.ERROR, format, argArray, null);
    }
    public void error(String msg, Throwable t) {
        filterAndLog_0_Or3Plus(FQCN, null, Level.ERROR, msg, null, t);
    }



(иначе я не знаю как объяснить этот загадочный код)

Но не сработало. Потому что в Яве это так не работает! :)

Тогда эти гениальные разработчики сделали что?

Правильно. Они сделали следующее:
(ch.qos.logback.classic.spi.LoggingEvent)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        this.message = message;
        this.argumentArray = argArray;

        if (throwable == null) {
            throwable = extractThrowableAnRearrangeArguments(argArray);
        }

        if (throwable != null) {
            this.throwableProxy = new ThrowableProxy(throwable);
            LoggerContext lc = logger.getLoggerContext();
            if (lc.isPackagingDataEnabled()) {
                this.throwableProxy.calculatePackagingData();
            }
        }



Типа если последний аргумент в массиве Throwable - то его обрабатывать как Throwable.
Это систематические проблемы дизайна, которые даже не пытаются устранять или обсуждать.

Ну и как результат - непонятный код\интерфейсы и наименования методов.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971417
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это возможно. Только ради всех святых (Тьюринга и Дейкстры) не надо сюда печатать простыни.

Кидай ссылку в гитхаб и кто-то посмотрит.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971418
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
Ох, какие тут дискуссии насчет кода.
А мой говнокод безработного недоджуна-trainee уровня сможете оценить, как допилю?

Проблему циклических зависимостей решил путем того, что из всяких handler'ов теперь возвращаю значение/сообщение, которое отправляется уже в главный класс бота. Т.о. нет необходимости инжектить бота в каждый обработчик. ИМХО, стало меньше гибкости, но в принципе терпимо.

Ты уже оценил его (и правильным образом).

У тебя проблема не с кодом, а с того что ты не набрав опыта Core Java сразу делаешь на Spring.
Это вызовет неправильные привычки.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971419
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Это возможно. Только ради всех святых (Тьюринга и Дейкстры) не надо сюда печатать простыни.

Кидай ссылку в гитхаб и кто-то посмотрит.

Нет проблем, я с гитом дружу :)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971420
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dakeiras
miroooha
Ох, какие тут дискуссии насчет кода.
А мой говнокод безработного недоджуна-trainee уровня сможете оценить, как допилю?

Проблему циклических зависимостей решил путем того, что из всяких handler'ов теперь возвращаю значение/сообщение, которое отправляется уже в главный класс бота. Т.о. нет необходимости инжектить бота в каждый обработчик. ИМХО, стало меньше гибкости, но в принципе терпимо.

Ты уже оценил его (и правильным образом).

У тебя проблема не с кодом, а с того что ты не набрав опыта Core Java сразу делаешь на Spring.
Это вызовет неправильные привычки.

Не соглашусь. У меня нет опыта в построении архитектуры приложения, потому что не было проектов. А Java Core я изучал прошлой осенью и этой зимой и чувствую себя там довольно комфортно (за исключением реальной многопоточки типа Fork Join Pool'a) для своего уровня.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971422
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
mayton
Это возможно. Только ради всех святых (Тьюринга и Дейкстры) не надо сюда печатать простыни.

Кидай ссылку в гитхаб и кто-то посмотрит.

Нет проблем, я с гитом дружу :)

Где ссылка?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971423
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторFork Join Pool

Что?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971425
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
dakeiras
пропущено...

Ты уже оценил его (и правильным образом).

У тебя проблема не с кодом, а с того что ты не набрав опыта Core Java сразу делаешь на Spring.
Это вызовет неправильные привычки.
(за исключением реальной многопоточки типа Fork Join Pool'a) для своего уровня.

Это и хорошо. Представь каких дров ты там наломаешь если тебе дать задание с взаимодейтсвием более чем 1 потока.
И модульные тесты кстати не доказывают правильность мультипоточи. Вообще не доказывают даже на кейсах.
И все равно синьоры за тебя будут все переделывать поэтому давать тебе многопоточное задание нет смысла.
Поживи спокойно так. Реальное понимание многопоточки только с опытом приходит. Т.к. кроме Java надо
еще копнуть в архитектуры железа. Без этого просто не будет понимания.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971426
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
miroooha
пропущено...
(за исключением реальной многопоточки типа Fork Join Pool'a) для своего уровня.

Это и хорошо. Представь каких дров ты там наломаешь если тебе дать задание с взаимодейтсвием более чем 1 потока.
И модульные тесты кстати не доказывают правильность мультипоточи. Вообще не доказывают даже на кейсах.
И все равно синьоры за тебя будут все переделывать поэтому давать тебе многопоточное задание нет смысла.
Поживи спокойно так. Реальное понимание многопоточки только с опытом приходит. Т.к. кроме Java надо
еще копнуть в архитектуры железа. Без этого просто не будет понимания.

с многопоточности надо начинать. Это самые фундаментальные основы любого программирования, особенно веб приложений.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971428
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
mayton
пропущено...

Это и хорошо. Представь каких дров ты там наломаешь если тебе дать задание с взаимодейтсвием более чем 1 потока.
И модульные тесты кстати не доказывают правильность мультипоточи. Вообще не доказывают даже на кейсах.
И все равно синьоры за тебя будут все переделывать поэтому давать тебе многопоточное задание нет смысла.
Поживи спокойно так. Реальное понимание многопоточки только с опытом приходит. Т.к. кроме Java надо
еще копнуть в архитектуры железа. Без этого просто не будет понимания.

с многопоточности надо начинать. Это самые фундаментальные основы любого программирования, особенно веб приложений.

А ты попробуй на джунские вопросы по мультипоточке ответить. Там будет сразу анекдот
про то как 1 глупец 100 мудрецов закопает. И спор про указатели С++ на массивы покажется
просто детским мультиком по сравнению с мультипоточкой.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971431
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
с многопоточности надо начинать. Это самые фундаментальные основы любого программирования, особенно веб приложений.
это типа как утверждение что SimpleDateFormat thread-safe, да?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971432
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
miroooha
пропущено...

Нет проблем, я с гитом дружу :)

Где ссылка?

Позже на днях скину сюда, там надо допилить ещё код.
dakeiras
авторFork Join Pool


Что?
Что?
Ну вот, из первого попавшегося поста на stackoverflow:

- ExecutorService имеет общую очередь задач и некоторое количество потоков, которые забирают по очереди таски и выполняют их.
- ForkJoinPool имеет некоторое количество потоков, но при этом еще имеет очередь тасков для каждого потока. Поток в процессе работы может дробить задачу на несколько тасков, одну он добавляет к себе в очередь а другую выполняет и это может рекурсивно повторяться. Если другой поток опустошил свою очередь, то он может взять задачи у другого потока, с конца очереди. Описанный механизм называется work-stealing. Это и является ключевым моментом различающим данные thread-pool'ы.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971433
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благослави Господь стековерфлоу. И зачем нам кастомер еще доллары платит? Пускай пишет туда вопросы
и ИИ ему выдает готовые артифакты....
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971449
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
dakeiras
с многопоточности надо начинать. Это самые фундаментальные основы любого программирования, особенно веб приложений.
это типа как утверждение что SimpleDateFormat thread-safe, да?

хорошо что помните.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971450
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miroooha
mayton
пропущено...

Где ссылка?

Позже на днях скину сюда, там надо допилить ещё код.
dakeiras
пропущено...


Что?

Что?
Ну вот, из первого попавшегося поста на stackoverflow:

- ExecutorService имеет общую очередь задач и некоторое количество потоков, которые забирают по очереди таски и выполняют их.
- ForkJoinPool имеет некоторое количество потоков, но при этом еще имеет очередь тасков для каждого потока. Поток в процессе работы может дробить задачу на несколько тасков, одну он добавляет к себе в очередь а другую выполняет и это может рекурсивно повторяться. Если другой поток опустошил свою очередь, то он может взять задачи у другого потока, с конца очереди. Описанный механизм называется work-stealing. Это и является ключевым моментом различающим данные thread-pool'ы.


Round robin что-ли?
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971581
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Кидай ссылку в гитхаб и кто-то посмотрит.

Собственно, решил не затягивать.

Вот сам проект: https://github.com/vonoriMMM/SpringBot-test
Где-то на время оставил заглушки (типо return null), буду дорабатывать.

Если кто-то посмотрит, буду благодарен за конструктивную критику. Это первый небольшой, но полноценный проект (до этого были только задачки javarush/codewars/leetcode) в моей пока еще не начавшейся карьере. И вообще что-то первое с использованием Spring'a. Можно улучшать и увеличивать функциональность, потенциал есть, но и сейчас это полностью работающая версия.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39971757
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В pom.xml желательно указать явно версию JDK и компиллятора которым ты это собирал.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972099
miroooha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
В pom.xml желательно указать явно версию JDK и компиллятора которым ты это собирал.

Обновил, добавил интересный (на мой взгляд) "сервис" по извлечению информации из Update. Чтоб в каждом месте не писать update.getMessage().getChatId() и т.д., завёл отдельный класс для всего этого добра. Да и логи случайно улетели. Но это всё никому не интересно, поэтому пусть будет! :D
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972117
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton
В pom.xml желательно указать явно версию JDK и компиллятора которым ты это собирал.

желательно вообще использовать градл,если есть прицел на реальную работу

и вообще стараться отходить от всего что содержит хмл-технология мертва и активно вытесняется

Да.

Но я вангую что Jetbrains убъёт его в течении 3 лет, выпустив свой сборщик.

Потому что всё же Gradle свернул не туда.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972127
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы - чемпионы по "вредным советам".

Автор - просил review, а вы предложили поменять сборщик.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972171
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton
В pom.xml желательно указать явно версию JDK и компиллятора которым ты это собирал.

желательно вообще использовать градл,если есть прицел на реальную работу

и вообще стараться отходить от всего что содержит хмл-технология мертва и активно вытесняется


Maven живее всех живых.
Он еще на похоронах Gradle постоит. :-)

ИМХО maven вполне актуальны сборщик.
И для новичков он будет попроще, чем gradle.
Maven без gradle норм. А вот gradle без maven будет трудновато. :-)
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972237
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
Но я вангую что Jetbrains убъёт его в течении 3 лет, выпустив свой сборщик.
Т.е. они за 15 лет (первую версию maven в расчет не берем) они так и не осилили в своей IDE толком реализовать поддержку maven, а тут внезапно за 3 года возьмут и сделают свой сборщик? У Jetbrains есть куча других проблем, которые нужно решать чтобы на плаву держаться, им точно не до замещения maven.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972260
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понимаю зачем Джетбрейнсу делать сборщики? Смысл сборщика как раз в том чтобы существовать отдельно от IDE.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972276
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
dakeiras
Но я вангую что Jetbrains убъёт его в течении 3 лет, выпустив свой сборщик.
Т.е. они за 15 лет (первую версию maven в расчет не берем) они так и не осилили в своей IDE толком реализовать поддержку maven, а тут внезапно за 3 года возьмут и сделают свой сборщик? У Jetbrains есть куча других проблем, которые нужно решать чтобы на плаву держаться, им точно не до замещения maven.

согласен насчёт поддержки сбощиков в идее. Меня это выбешивало всегда.

Только в последних версиях стало получше.

Но сделали же они котлин и он даже "взлетел". Так же могут и сборщик сделать. Там ничего особо сложного нет.

авторкотлин порос мхом и страшные угрозы убить жаву так и остались угрозами,даже не смотря на мощную поддержку гугла
это приятно читать. Я против котлина. Был (и есть) Груви - доброкачественный язык, полностью опен сорс.
Это всё имперские замашки у Jet Brains.

авторЯ не понимаю зачем Джетбрейнсу делать сборщики? Смысл сборщика как раз в том чтобы существовать отдельно от IDE.
тот же сценарий что и с Котлином + Idea/Android studio.
...
Рейтинг: 0 / 0
Не получается поднять бота на Spring Boot
    #39972398
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
Но сделали же они котлин и он даже "взлетел". Так же могут и сборщик сделать. Там ничего особо сложного нет.

Дъявол кроется в деталях. Проблема в построении новой системы сборки она совсем не алгоритмическая, если смотреть историю со стороны жавы, то сначала был make, потом ant, потом maven, при этом каждая новая система сборки добавляла новые киллер-фичи, без которых сейчас ну вообще никак. Gradle не взлетает потому что "Directed Acyclic Graph" сам по себе нафиг никому не нужен - это просто некая идея того, как система устроена внутри, а мне нужно нажать кнопку и получить результат, при этом чтобы под капотом не творился кромешный ужас, и на это можно было бы хоть как-то влиять без чтения документации и форумов, единственная киллер-фича у gradle - это в buildSrc можно писать свой креатив, при этом она совершенно незаметна на фоне всех остальных недостатков (от общей тормознутости, до невозможности построить SDLC, самый смак здесь - если плагин падает, то в IDE даже проект не разворачивается). Т.е. чтобы сейчас родить систему сборки нужно:
- придумать пару-тройку киллер-фич
- получить поддержку в распространенных IDE
- сделать поддержку распространенных JVM-based языков + фронтовую срань
- реализовать аналоги уже существующих возможностей/плагинов в maven (наверное пара сотен плагинов будет)
...
Рейтинг: 0 / 0
233 сообщений из 233, показаны все 10 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Не получается поднять бота на Spring Boot
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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